Redis的Java客户端
Redis 的 Java 客户端很多,常用的几种:
- Jedis:基于 Java 的 Redis 客户端,提供了 Redis 命令的全面支持。
- Lettuce:高性能的 Java 客户端库,用于与 Redis 数据库进行交互。它支持同步、异步和反应式编程模型,提供了丰富的 API 来操作 Redis。Lettuce 与 Jedis 并列成为最热门的 Redis Java 客户端之一,并且已经成为 Spring Boot 2.0 版本默认的 Redis 客户端。
- Spring Data Redis:Spring 提供的一个用于操作 Redis 的模块,它提供了多种高层次的数据访问抽象,使得在 Spring 应用程序中使用 Redis 变得更加容易和直观。
Spring Data Redis使用方式
操作步骤:
1.导入Spring Data Redis 的maven坐标:
XML
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.在配置文件中配置Redis数据源 :
java
spring:
redis:
host: localhost
port: 6379
password: 123456
3.编写配置类,创建RedisTemplate对象:
java
@Configuration
@Slf4j
public class RedisConfiguration {
@Bean
public RedisTemplate getRedisTemplate(RedisConnectionFactory redisConnectionFactory){
// 创建RedisTemplate模版对象
log.info("开始创建Redis模版对象...");
RedisTemplate redisTemplate = new RedisTemplate();
// 设置模版对象关联的RedisConnectionFactory
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 设置模版对象关联的Key序列化器
redisTemplate.setKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
}
4.通过RedisTemplate对象操作Redis:
RedisTemplate 针对大量api进行了归类封装,将同一数据类型的操作封装为对应的Operation接口,具体分类如下:
java
@SpringBootTest
public class SpringDataRedisTest {
@Autowired
private RedisTemplate redisTemplate;
@Test
public void test() {
ValueOperations valueOperations = redisTemplate.opsForValue();// 字符操作操作
HashOperations hashOperations = redisTemplate.opsForHash();// 哈希操作
ListOperations listOperations = redisTemplate.opsForList();// 列表操作
SetOperations setOperations = redisTemplate.opsForSet();// 集合操作
ZSetOperations zSetOperations = redisTemplate.opsForZSet();// 有序集合操作
}
}
操作字符串类型的数据
java
/**
* 测试Redis字符串操作
* 本方法展示了如何在Redis中设置和获取字符串值,包括设置过期时间和条件设置
*/
@Test
public void testString() {
// 获取RedisTemplate的ValueOperations对象,用于操作字符串值
ValueOperations valueOperations = redisTemplate.opsForValue();
// 设置键值对,将键"name"的值设置为"jack"
valueOperations.set("name", "jack");
// 尝试获取键"name"的值
valueOperations.get("name");
// 设置带过期时间的键值对,键"code"的值设置为"123",并在60秒后自动过期
valueOperations.set("code","123",60, TimeUnit.SECONDS);
// 使用setIfAbsent方法,如果键"code"不存在,则设置其值为"456"
valueOperations.setIfAbsent("code", "456");
}
操作哈希类型的数据
java
/**
* 使用Redis的Hash数据类型进行操作的测试方法
* 本方法主要演示了如何在Redis中使用HashOperations进行键值对存储、读取、删除等操作
*/
@Test
public void testHash() {
// 初始化HashOperations对象,用于操作Redis中的Hash数据类型
HashOperations hashOperations = redisTemplate.opsForHash();
// 向Redis中名为"user:1"的Hash中添加键值对,"name"字段存储值"jack"
hashOperations.put("user:1","name","jack");
// 向Redis中名为"user:1"的Hash中添加键值对,"age"字段存储值"18"
hashOperations.put("user:1","age","18");
// 从名为"user:1"的Hash中根据键"name"获取值,此处获取"jack"
hashOperations.get("user:1","name");
// 从名为"user:1"的Hash中根据键"age"获取值,此处获取"18"
hashOperations.get("user:1","age");
// 获取所有以"user"开头的Hash的键,用于查看或操作这些键对应的Hash数据
hashOperations.keys("user");
// 获取所有以"user"开头的Hash的值,用于查看或操作这些值
hashOperations.values("user");
// 从名为"user:1"的Hash中删除键为"name"的字段,此处删除"jack"
hashOperations.delete("user:1","name");
}
操作列表类型的数据
java
/**
* 测试Redis列表操作
* 本方法展示了如何在Redis列表中进行插入、查询和移动元素等操作
*/
@Test
public void testList() {
// 创建Redis列表操作对象
ListOperations listOperations = redisTemplate.opsForList();
// 向列表左侧添加一个元素
listOperations.leftPush("list","jack");
// 向列表左侧连续添加多个元素
listOperations.leftPushAll("list","tom","lucy","mary");
// 获取列表中的所有元素
listOperations.range("list",0,-1);
// 从列表右侧删除一个元素
listOperations.rightPop("list");
// 获取列表的大小
listOperations.size("list");
}
操作集合类型的数据
java
/**
* 测试Redis中Set数据结构的操作
* 本方法展示了使用RedisTemplate进行Set操作的各种方法,包括添加成员、获取成员、删除成员、检查成员是否存在等
* 通过这些操作,我们可以了解如何在应用程序中操作Redis中的Set数据结构
*/
@Test
public void testSet() {
// 获取RedisTemplate的SetOperations操作对象
SetOperations setOperations = redisTemplate.opsForSet();
// 向名为"set"的集合中添加多个成员
setOperations.add("set","jack","tom","lucy","mary");
// 获取名为"set"的集合中的所有成员
setOperations.members("set");
// 获取名为"set"的集合的成员数量
setOperations.size("set");
// 检查名为"set"的集合中是否包含成员"jack"
setOperations.isMember("set","jack");
// 计算名为"set1"和"set2"的集合的交集
setOperations.intersect("set1","set2");
// 计算名为"set1"和"set2"的集合的并集
setOperations.union("set1","set2");
// 计算名为"set1"和"set2"的集合的差集
setOperations.difference("set1","set2");
// 随机获取名为"set"的集合中的2个成员
setOperations.randomMembers("set",2);
// 随机获取名为"set"的集合中的2个不重复成员
setOperations.distinctRandomMembers("set",2);
// 从名为"set"的集合中移除成员"jack"
setOperations.remove("set","jack");
}
操作有序集合类型的数据
java
/**
* 测试Redis中ZSet的操作
* 本方法通过使用RedisTemplate类的各种ZSet操作方法,演示如何对Redis中的ZSet进行操作
* 包括添加元素、按范围查询、按分数查询、增加分数和删除元素等操作
*/
@Test
public void testZSet() {
// 获取ZSet操作对象
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
// 向ZSet中添加元素,同时指定元素的分数
zSetOperations.add("zset","jack",10);
zSetOperations.add("zset","tom",20);
zSetOperations.add("zset","lucy",30);
// 按范围查询ZSet中的元素,0,-1表示查询所有元素
zSetOperations.range("zset",0,-1);
// 按分数查询ZSet中的元素,查询分数在0到100之间的元素
zSetOperations.rangeByScore("zset",0,100);
// 为指定元素增加分数,此处为将"jack"的分数增加10
zSetOperations.incrementScore("zset","jack",10);
// 删除ZSet中的指定元素
zSetOperations.remove("zset","jack");
}
通用命令
java
/**
* 测试RedisTemplate的常见操作
* 本方法展示了与Redis交互的各种基本操作,包括键的检查、删除、过期、重命名以及事务操作等
* 主要用于验证RedisTemplate的功能和集成
*/
@Test
public void testCommon(){
// 检索所有键
redisTemplate.keys("*");
// 检查是否存在特定的键
redisTemplate.hasKey("name");
// 删除单个键
redisTemplate.delete("name");
// 删除多个键
redisTemplate.delete(Arrays.asList("name","age"));
// 设置键的过期时间
redisTemplate.expire("name",10, TimeUnit.SECONDS);
// 移除键的过期时间,使其永不过期
redisTemplate.persist("name");
// 将键重命名为新的名称
redisTemplate.rename("name","age");
// 当键名不存在时,将其重命名为新的名称
redisTemplate.renameIfAbsent("name","age");
// 获取键的类型
redisTemplate.type("name");
}