七. Redis 中 Jedis 的细致剖析与运用
目录
- 七. Redis 中 Jedis 的细致剖析与运用
- 1. Jedis 概述
- 2. Java程序里使用 Jedis 操作 Redis 数据
- 2.1 Java 程序使用 Jedis 连接 Redis 的留意要点
- 2.2 Java程序经 Jedis 操作 Redis 的 key 键值对
- 2.3 Java程序经 Jedis 操作 Redis 的 string 字符串
- 2.4 Java程序经 Jedis 操作 Redis 的 list 列表
- 2.5 Java程序经 Jedis 操作 Redis 的 set 集合
- 2.6 Java程序经 Jedis 操作 Redis 的 hash 哈希表
- 2.7 Java程序经 Jedis 操作 Redis 的 Zset 有序集合
- 3. 结语:
1. Jedis 概述
Jedis是Java程序与Redis进行交互的工具,这和Java操作MySQL时使用JDBC的作用是类似的。
Jedis工作示意图:
Jedis的API文档:
https://www.javadoc.io/doc/redis.clients/jedis/latest/index.html

下面是网上一位网友总结的 Jedis中文文档,此处进行了转载:
https://blog.csdn.net/CYY941027/article/details/109110455
创建 Jedis 对象,采用对应的构造器:

键值对的操作:

字符串操作:

整数与浮点数操作:

列表List操作:

集合(Set)操作:

哈希表(Hash)操作:

有序集合(Zsort)操作:

排序操作:

可以发现上述 API 的方法,很明显就是我们在 Redis 中敲的命令,只不过换成了Java中的方法来使用。因为我们要在Java程序里操作 Redis,所以自然要把命令转换成Java中的方法来进行操作。
2. Java程序里使用 Jedis 操作 Redis 数据
快速入门:




若要使用 jedis,需在 pom.xml 文件中引入相关的 jar 依赖。

<dependencies>
<!-- 引入 jedis 依赖-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>
</dependencies>
Java 程序通过 Jedis 连接数据库之前,得先把 Linux 中安装的 Redis 服务器启动起来。
[root@localhost bin]# redis-server /etc/redis.conf # 启动 redis 服务器
[root@localhost bin]# redis-cli # 进入到 Redis 客户端



2.1 Java 程序使用 Jedis 连接 Redis 的留意要点

package com.rainbowsea.jedis;
import org.junit.Test;
import redis.clients.jedis.Jedis;
public class JedisTest {
// 连接 Redis
@Test
public void con() {
// 使用 ip地址 + redis的端口的构造器方法
Jedis jedis = new Jedis("192.168.76.145", 6379);
String ping = jedis.ping();
System.out.println("连接成功 ping 返回的结果 = " + ping);
jedis.close(); // 关闭连接
}
}
ip地址无误,端口号也是默认的6379 。但却显示连接不上,还提示连接超时。
![]()
原因与解决办法:
- 第一个缘由是:Linux中6379端口的防火墙处于关闭状态。若防火墙未开放该端口,外部无法连接此端口。所以需在Linux里开启6379端口,使外界(如Java程序)能连接该端口。
具体操作如下:
[root@localhost bin]# firewall-cmd --list-all

设置开放的端口号:
[root@localhost bin]# firewall-cmd --add-port=6379/tcp --permanent

留意:设置开放端口后,需重启防火墙才能生效。
重启防火墙:
[root@localhost bin]# firewall-cmd --reload # 重启防火墙

再次执行 firewall-cmd --list-all
命令查看是否将6379端口开启成功。
[root@localhost bin]# firewall-cmd --list-all

- 第二个缘由:在Redis的
/etc/redis.conf
文件中,存在bind
设置,需将其设为远程访问配置,而非本机配置。
用 vim 打开该文件进行修改。
[root@localhost bin]# vim /etc/redis.conf


# bind 127.0.0.1 -::1
同样,修改配置后,需关闭 Redis 服务,再启动 Redis 服务,配置才能生效。
[root@localhost ~]# redis-cli -p 6379 shutdown # 关闭 Redis 服务
[root@localhost bin]# redis-server /etc/redis.conf # 重启Redis 服务器

- 第三个缘由:需将
protected-mode yes
修改为no
关闭保护模式,如图所示
protected-mode no

同样,修改配置后,需关闭 Redis 服务,再启动 Redis 服务,配置才能生效。
再次尝试在Java程序中连接 Redis 。

- Redis 默认未配置密码,但无密码会被认为不安全。可为 Redis 配置密码,在
/etc/redis.conf
文件中的requirepass
配置密码,如图所示:
requirepass rainbowsea

同样,修改配置后,需关闭 Redis 服务,再启动 Redis 服务,配置才能生效。
设置密码后:使用 auth 密码
登录。


再次尝试在Java程序中连接 Redis 。
留意: 若Redis设置了密码,Java程序连接时需先执行
auth()
方法进行认证登录,方能连接上 Redis 服务,否则无法连接。

“`java
package com.rainbowsea.jedis;
import org.junit.Test;
import redis.clients.jedis.Jedis;
public class JedisTest {
// 连接 Redis
// 1. 如果Redis 设置了密码,则需要进行身份校验
// 2. 因为需要连接到 redis端口,比如6379,就需要配置防火墙,放开端口
// 3. 注意修改 bind ,支持远程连接
// 4 注意关闭保护模式,protected-mode no ,no表示关闭
// 5. 注意:设置了密码,需要执行 auth(密码)进行身份验证
@Test
public void con() {
// 使用 ip地址 + redis的端口的构造器方法
Jedis jedis = new Jedis(“192.168.76.145”, 6379);
// 如果Redis 配置了密码,则需要进行身份校验