Spring-Data-Redis是spring大家族的一部分,通过简单的配置访问Redis服务,对Reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了Redis各种操作、异常处理及序列化,支持发布订阅。
RedisTemplate介绍Spring封装了RedisTemplate对象来进行对Redis的各种操作,它支持所有的Redis原生的api。
RedisTemplate中定义了对5种数据结构操作
redisTemplate.opsForValue();//操作字符串 redisTemplate.opsForHash();//操作hash redisTemplate.opsForList();//操作list redisTemplate.opsForSet();//操作set redisTemplate.opsForZSet();//操作有序setStringRedisTemplate与RedisTemplate
两者的关系是StringRedisTemplate继承RedisTemplate。两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。SDR默认采用的序列化策略有两种,一种是String的序列化策
略,一种是JDK的序列化策略。
StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。
pom.xml添加依赖
在application.properties中配置org.springframework.boot spring-boot-starter-data-redis-reactive org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test io.projectreactor reactor-test test
#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;
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate 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;
@SpringBootTest
class SpringDataRedisApplicationTests {
@Autowired
RedisTemplate redisTemplate;
@Test
void contextLoads() {
//保存数据
redisTemplate.opsForValue().set("k1","v1");
//获取数据
redisTemplate.opsForValue().get("k1");
}
@Test
void listTest(){
//添加元素
redisTemplate.opsForList().rightPush("l1","v1");
redisTemplate.opsForList().rightPush("l2","v2");
//获取元素
System.out.println(redisTemplate.opsForList().rightPop("l1"));
}
@Test
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);
}
@Test
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"));
}
@Test
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);
}
}
}



