Redis实训:社交关注关系存储任务

news/2025/1/20 19:05:10/

一、实验目的

1.  理解Redis的安装、配置及基本操作。

2.  掌握Redis的不同数据类型及相应操作方法。

3.  学习使用Java客户端连接Redis,并进行数据操作。

4.  实践使用Redis存储社交关注关系的功能。

二、实验环境准备

1.  JAVA环境准备:确保Java Development Kit (JDK) 已安装并配置好环境变量。

2.  Hadoop环境准备:安装并配置Hadoop环境,确保Hadoop的各个组件可以在伪分布式模式下运行。

三、实验教材参考

大数据存储》,谭旭,人民邮电出版社,2022,ISBN 978-7-115-59414-3。

四、实验内容与步骤

1、安装和配置Redis

按照Redis官方配置或适合操作系统的指南,安装和配置了Redis数据库

安装成功后启动界面如下:

2、验证Java客户端连接

1. 使用Maven或手动导入Jedis库到Java项目中。  

使用Maven构建项目,在pom.xml文件中添加Jedis依赖:

<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>4.4.4</version>
</dependency>

2. 编写简单的Java程序,连接到本地Redis服务,并进行简单的读写操作,验证连接成功。

(1)实现代码

package com.example;import redis.clients.jedis.Jedis;public class Four_Redis {public static void main(String[] args) {// 连接到本地Redis服务Jedis jedis = new Jedis("192.168.10.200", 6379);// 测试连接System.out.println("连接成功!Redis服务器状态: " + jedis.ping());// 写入数据到Redisjedis.set("key1", "Hello, Redis!");// 从Redis读取数据String value = jedis.get("key1");System.out.println("从Redis中获取的值: " + value);// 关闭连接jedis.close();}
}

(2)运行结果

3、实现社交关注关系存储任务

1. 设计并编写Java程序,实现用户关注其他用户的功能。

2. 实现查询某用户关注的用户列表和某用户的粉丝列表的功能。

(1)Java实现代码:

package com.example;
import redis.clients.jedis.Jedis;
import java.util.Set;
public class Four_Redis {private final Jedis jedis;public Four_Redis() {// 连接到本地Redis服务this.jedis = new Jedis("192.168.10.200", 6379);System.out.println("连接Redis成功: " + jedis.ping());}// 用户关注其他用户public void followUser(String userId, String followUserId) {jedis.sadd("user:" + userId + ":following", followUserId); // 当前用户的关注列表jedis.sadd("user:" + followUserId + ":followers", userId); // 被关注用户的粉丝列表}//获取某用户关注的用户列表public Set<String> getFollowing(String userId) {return jedis.smembers("user:" + userId + ":following");}// 获取某用户的粉丝列表public Set<String> getFollowers(String userId) {return jedis.smembers("user:" + userId + ":followers");}public void close() {jedis.close();}public static void main(String[] args) {Four_Redis app = new Four_Redis();// 模拟用户关注关系app.followUser("张三", "二麻子");app.followUser("张三", "三顺子");app.followUser("二麻子", "三顺子");app.followUser("三顺子", "张三");// 获取用户关注的列表System.out.println("张三关注的用户: " + app.getFollowing("张三"));System.out.println("二麻子关注的用户: " + app.getFollowing("二麻子"));// 获取用户的粉丝列表System.out.println("三顺子的粉丝: " + app.getFollowers("三顺子"));System.out.println("张三的粉丝: " + app.getFollowers("张三"));// 关闭连接app.close();}
}

(2)运行结果

4、连接Redis时报错

报错信息:

DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server. 3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. 4) Setup a bind address or an authentication password. NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside.

Redis正在运行在保护模式下,保护模式默认情况下只允许本地回环接口访问,不允许外部机器直接连接。

方法一:禁用保护模式。

(1)使用命令修改

Shell进入Redis后,执行命令CONFIG SET protected-mode no禁用保护模式,可以执行命令CONFIG REWRITE使更改永久生效。

(2)修改配置文件

打开 Redis 的配置文件,作者的配置文件在/software/redis中,找到protected-mode yes,修改为protected-mode no,保存后重新启动Redis :sudo systemctl restart redis

方法二:取消Redis占用

ps aux | grep redis查看Redis进程使用。作者这里显示的结果如下

root   3550  0.0  0.2 145412  2108 ?    Ssl  11:27   0:00 redis-server *:6379表示一个运行中的 Redis 服务进程。

root:运行该进程的用户。这里显示的是 root,说明 Redis 是以 root 用户权限启动的(不推荐在生产环境中以 root 用户运行服务,最好用一个专门的用户来运行)。

3550:进程 ID(PID)。每个进程在系统中都有唯一的 PID,可以通过这个数字操作或监控这个进程(比如使用 kill 命令终止进程)。

0.0:该进程的 CPU 使用率(%CPU)。这里显示 0.0%,说明 Redis 当前几乎没有占用 CPU。

0.2:该进程的内存使用率(%MEM)。这里显示 0.2%,说明 Redis 只占用了系统少量内存。

145412:虚拟内存大小(VSZ,单位为 KB)。表示 Redis 服务使用的总虚拟内存量,这包括了被分配但未实际使用的内存。

2108:常驻内存大小(RSS,单位为 KB)。表示 Redis 实际占用的物理内存。

?:TTY(终端)。? 表示这个进程不是由终端直接启动的,而是一个后台服务(守护进程)。

Ssl:进程的状态信息:

S:表示进程处于休眠状态(sleeping)。

s:表示进程是一个会话领导进程。

l:表示进程有多线程(使用 pthread)。

11:27:进程启动的时间。这表明该进程在当天的 11:27 启动。

0:00:该进程累计的 CPU 使用时间。这里表示该进程自启动以来几乎没有消耗 CPU 时间。

redis-server *:6379:进程启动的命令及参数:

redis-server:表示这是 Redis 服务器的主进程。

*:表示 Redis 绑定的网络接口为所有地址(即 0.0.0.0),可以接受来自外部的连接。

6379:表示 Redis 服务监听的端口号,6379 是 Redis 默认端口。

root       3681  0.0  0.0 112824   988 pts/0    R+   11:35   0:00 grep --color=autoredis

显示的是 grep redis 命令本身的进程信息,因为 ps aux 的结果也包含了正在运行的 grep 命令进程。

这里需要关闭Redis进程,并重启服务。


http://www.ppmy.cn/news/1564729.html

相关文章

Linux安装docker,安装配置xrdp远程桌面

Linux安装docker&#xff0c;安装配置xrdp远程桌面。 1、卸载旧版本docker 卸载旧版本docker命令 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine现在就是没有旧版本的d…

Python----Python高级(面向对象:封装、继承、多态,方法,属性,拷贝,组合,单例)

一、封装 隐藏对象的属性和实现细节&#xff0c;只对外提供必要的方法。相当于将“细节封装起来”&#xff0c;只对外暴露“相关调用方法”。 Python追求简洁的语法&#xff0c;没有严格的语法级别的“访问控制符”&#xff0c;更多的是依靠程序员自觉实现。 class BankAccoun…

使用opencv.js 的时候报错 Uncaught 1022911432

需求&#xff1a; -如题 进程&#xff1a; 这个报错是opencv 内存溢出了可以在开始的时候分配更多的内存cv.setMemoryManagement(1024 * 1024 * 50)OpenCV.js 中&#xff0c;很多对象&#xff08;如 Mat&#xff09;需要手动释放。如果你频繁创建矩阵或图像对象而不释放&…

Python爬虫:获取详情接口和关键词接口

在电商领域&#xff0c;获取商品详情和关键词推荐对于市场分析和用户体验优化至关重要。Python爬虫技术可以自动化地从网页中提取这些信息。本文将详细介绍如何使用Python爬虫获取详情接口和关键词接口的数据&#xff0c;包括环境搭建、基本爬虫编写、数据解析、高级爬虫技术以…

2024 京东零售技术年度总结

每一次回望&#xff0c;都为了更好地前行。 2024 年&#xff0c;京东零售技术在全面助力业务发展的同时&#xff0c;在大模型应用、智能供应链、端技术、XR 体验等多个方向深入探索。京东 APP 完成阶段性重要改版&#xff0c;打造“又好又便宜”的优质体验&#xff1b;国补专区…

【学习笔记】Macbook管理多个不同的Python版本

在MacBook上管理不同项目的不同Python版本&#xff0c;可以使用多种方法。以下是一些常见的方法&#xff1a; 1. 使用 pyenv pyenv 是一个非常流行的工具&#xff0c;可以让你轻松安装和切换多个Python版本。以下是安装和使用 pyenv 的步骤&#xff1a; 安装 pyenv 安装依赖…

车载以太网:新能源汽车智驾的幕后英雄

在新能源汽车蓬勃发展的当下&#xff0c;智能驾驶已成为行业变革的核心驱动力。而车载以太网&#xff0c;作为支撑智能驾驶实现的关键技术&#xff0c;正如同汽车的 “高速信息公路”&#xff0c;为车辆内各系统间海量数据的高速、稳定传输提供了保障。随着特斯拉、蔚来、小鹏等…

mkv转码mp4(ffmpeg工具)

基于windows&#xff0c;Linux也可以用&#xff0c;都是命令行 下载路径&#xff08;https://github.com/BtbN/FFmpeg-Builds/releases&#xff09; 下载安装包&#xff1a;ffmpeg-n6.1-latest-win64-lgpl-6.1.zip&#xff0c;&#xff08;根据自己的平台选择下载&#xff09;并…