目录
概述
在Redis官网中提供了各种语言的客户端
标记为❤的就是推荐使用的 java 客户端,
包括:
- Jedis 和 Lettuce:这两个主要是提供了 Redis 命令对应的 API ,方便我们操作 Redis ,而 SpringDataRedis 又对这两种做了抽象和封装。
- Redisson:是在 Redis 基础上实现了分布式的可伸缩的java数据结构,例如 Map.Queue 等,而且支持跨进程的同步机制:Lock.Semaphore 等待,比较适合用来实现特殊的功能需求。
官方 Redis 客户端demo -- Java
1. 找到 Redis 客户端
2. 可以选择 Jedis 和 Lettuce
3. 选择 Jedis
内容拉到下面
看到可以选择是 Maven 或 Gradle
这是一个 String 类型的示例
Jedis -- 快速入门
Jedis 简介
Jedis 是一个高性能的 Redis Java 客户端库,由 Salvatore Sanfilippo 开发,后来由诸多贡献者维护。
它提供了丰富的 API 来与 Redis 数据库进行交互,支持 Redis 的大部分功能,包括基本的数据类型操作、事务、发布/订阅、排序、集合操作、Lua 脚本、HyperLogLog、地理空间索引和搜索等。
特点 :
- 简单易用:Jedis 提供了直观的方法调用来执行 Redis 命令,使得开发者可以轻松地集成 Redis 到 Java 应用中。
- 高效:Jedis 支持管道(pipelining)和批处理,允许一次发送多个命令而无需等待每个命令的响应,从而减少网络往返次数,提高性能。
- 连接管理:除了单个连接外,Jedis 还支持连接池 (JedisPool),可以复用连接,避免频繁建立和断开连接的开销。
- 事务支持:Jedis 支持 Redis 的 MULTI/EXEC 事务机制,可以原子性地执行一组命令。
- 异步支持:从 Jedis 2.9.0 版本开始,提供了异步 API,允许开发者使用回调或 Future 接口来处理命令响应,进一步提升性能。
创建项目和测试
1. 引入依赖
<!--jedis-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.7.0</version>
</dependency>
<!--单元测试-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>
2. 建立连接
private Jedis jedis ;
/**
* 在每个测试之前设置Redis连接。
* 这个方法确保了每次测试都有一个干净的Redis环境。
* 它通过建立到Redis服务器的连接,进行身份验证,并选择一个特定的数据库来准备测试。
*
* @BeforeEach 注解指示这个方法在每个测试方法执行之前运行。
*/
@BeforeEach
void setUp() {
// 初始化Jedis客户端,连接到Redis服务器。
// 1. 建立连接
jedis = new Jedis("192.168.50.130", 6379);
// 对Redis服务器进行身份验证。
// 2. 设置密码
jedis.auth("123456");
// 选择要使用的Redis数据库。
// 3. 选择库
jedis.select(1);
}
3. 测试
@Test
void testString() {
// 存入数据
String result = jedis.set("name", "虎哥");
System.out.println("result = " + result);
// 获取数据
String name = jedis.get("name");
System.out.println("name = " + name);
}
@Test
void testHash() {
// 插入hash数据
jedis.hset("user:1", "name", "Jack");
jedis.hset("user:1", "age", "21");
// 获取
Map<String, String> map = jedis.hgetAll("user:1");
System.out.println(map);
}
测试结果:
redis可视化客户端
4. 释放资源
@AfterEach
void tearDown() {
if (jedis != null) {
jedis.close();
}
}
Jedis连接池
JedisPool 简介
Jedis 是一个用于与 Redis 数据库交互的 Java 客户端库。在高并发的应用场景中,频繁地创建和销毁 Redis 连接会导致不必要的性能开销。为了解决这个问题,Jedis 提供了一个连接池 (JedisPool) 功能,它可以重用已有的连接,从而显著提高效率和响应速度。
JedisPool 是基于 GenericObjectPool 实现的,后者是 Apache Commons Pool 的一部分,专门用于管理可重用对象的池。
JedisPool 允许你配置最大连接数、空闲连接数、超时时间等参数,以适应不同的应用场景。
Jedis 本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,因此我们推荐大家使用 Jedis 连接池代替 Jedis 的直连方式
有关池化思想,并不仅仅是这里会使用,很多地方都有,比如说我们的 数据库连接池,比如我们 tomcat 中的线程池,这些都是池化思想的体现。
池化技术文章:概述池化技术-CSDN博客
创建连接池
public class JedisConnectionFactory {
private static final JedisPool jedisPool;
static {
// 初始化连接池配置对象
JedisPoolConfig config = new JedisPoolConfig();
// 设置连接池的最大连接数,默认为8,这里设置为100
// 当所有物理Jedis实例都被占用的时候,最多再临时创建多少个连接
config.setMaxTotal(100);
// 设置连接池的最大空闲连接数,默认也是8,这里设置为50
// 当需要一个连接时,如果有空闲的连接,则直接返回,否则创建新的连接
config.setMaxIdle(50);
// 设置连接池的最小空闲连接数,默认为0,这里设置为10
// 这个参数的意义在于保证连接池中始终有10个以上的空闲连接,以便于快速响应新的请求
config.setMinIdle(10);
// 设置从连接池获取连接的最大等待时间,默认为-1,表示无限等待
// 这里设置为1000毫秒,即1秒,如果超过这个时间还没有可用的连接,则抛出异常
config.setMaxWaitMillis(1000);
// 创建Jedis连接池对象
// 参数1:JedisPoolConfig对象,用于配置连接池的行为
// 参数2:Redis服务器的IP地址,这里是"192.168.50.1"
// 参数3:Redis服务器的端口号,默认为6379
// 参数4:连接超时时间,单位毫秒,这里是1000毫秒
// 参数5:连接密码,这里是"123456"
// 注意:如果Redis服务器不需要密码验证,可以将此参数设为null
jedisPool = new JedisPool(config,
"192.168.50.1",
6379,
1000,
"123456");
}
public static Jedis getJedis() {
return jedisPool.getResource();
}
}
使用连接池
@BeforeEach
void setUp() {
// 初始化Jedis客户端,连接到Redis服务器。
// 1. 建立连接
// jedis = new Jedis("192.168.50.130", 6379);
jedis = JedisConnectionFactory.getJedis();
// 对Redis服务器进行身份验证。
// 2. 设置密码
jedis.auth("123456");
// 选择要使用的Redis数据库。
// 3. 选择库
jedis.select(1);
}
代码说明:
1. 在我们完成了使用工厂设计模式来完成代码的编写之后,我们在获得连接时,就可以通过工厂来获得,而不用直接去 new 对象,降低耦合,并且使用的还是连接池对象。
2. 当我们使用了连接池后,当我们关闭连接其实并不是关闭,而是将Jedis还回连接池的。
Redis其他相关博客(都出自本人哦!!!):