简介 Spring-Data-Redis是spring大家族的一部分,通过简单的配置访问Redis服务,对Reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了Redis各种操作、异常处理及序列化,支持
简介
Spring-Data-Redis是spring大家族的一部分,通过简单的配置访问Redis服务,对Reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了Redis各种操作、异常处理及序列化,支持发布订阅。
RedisTemplate介绍
Spring封装了RedisTemplate对象来进行对Redis的各种操作,它支持所有的Redis原生的api。
- RedisTemplate中定义了对5种数据结构操作
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set
StringRedisTemplate与RedisTemplate
- 两者的关系是StringRedisTemplate继承RedisTemplate。
- 两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。
- SDR默认采用的序列化策略有两种,一种是String的序列化策
略,一种是JDK的序列化策略。
StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。
pom.xml添加依赖
<dependencies><dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
在application.properties中配置
#redis服务器连接地址spring.redis.host=192.168.134.130
#redis服务器连接端口
spring.redis.port=6379
#连接池最大连接数
spring.redis.pool.max-active=8
#连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
#连接池中的最大空闲连接
spring.redis.pool.max-idle=8
#连接池中的最小空闲连接
spring.redis.pool.min-idle=0
#连接超时时间(毫秒)
spring.redis.timeout=30000
自定义序列化
package com.neu.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* @Author yqq
* @Date 2022/03/27 22:07
* @Version 1.0
*/
public class RedisConfig {
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
//添加序列化机制
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
}
使用redisTemplate进行各类型的CURD操作
package com.neu;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import java.util.Set;
class SpringDataRedisApplicationTests {
RedisTemplate redisTemplate;
/**
* string操作
*/
void contextLoads() {
//保存数据
redisTemplate.opsForValue().set("k1","v1");
//获取数据
redisTemplate.opsForValue().get("k1");
}
/**
* list操作
*/
void listTest(){
//添加元素
redisTemplate.opsForList().rightPush("l1","v1");
redisTemplate.opsForList().rightPush("l2","v2");
//获取元素
System.out.println(redisTemplate.opsForList().rightPop("l1"));
}
/**
* hash操作
*/
void hashTest(){
//添加hash元素
redisTemplate.opsForHash().put("user","name","科比");
redisTemplate.opsForHash().put("user","age",18);
//获取元素
String o = (String) redisTemplate.opsForHash().get("user", "name");
System.out.println(o);
}
/**
* set操作
*/
void setTest(){
//添加元素
redisTemplate.opsForSet().add("s1","v1");
redisTemplate.opsForSet().add("s1","v1");
redisTemplate.opsForSet().add("s1","v2");
//获取元素
Set s = redisTemplate.opsForSet().members("s1");
for (Object o:s){
System.out.println(o);
}
//获取set集合的长度
System.out.println(redisTemplate.opsForSet().size("s1"));
}
/**
* zset操作
*/
void zsetTest(){
//添加元素
redisTemplate.opsForZSet().add("z1","z1",67);
redisTemplate.opsForZSet().add("z1","z2",68);
redisTemplate.opsForZSet().add("z1","z3",88);
//获取元素
// Set z1 = redisTemplate.opsForZSet().range("z1", 0, -1);
Set z1 = redisTemplate.opsForZSet().rangeByScore("z1",50,80);
for (Object o:z1){
System.out.println(o);
}
}
}