第十章 Spring Data Redis v1.0
第一部分 Spring Data Redis
Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis
一、简介
1.作用
- 提供了对不同Redis客户端的整合(Lettuce和Jedis)
- 提供了Redis Template统一API来操作Redis
- 支持Redis的发布订阅模型
- 支持Redis哨兵和Redis集群
- 支持基于Lettuce的响应式编程
- 支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化
- 支持基于Redis的JDKCollection实现
二、快速入门
1.引入依赖
xml
<!--Redis依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--连接池依赖-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>2.配置文件
bash
#Redis配置信息
spring.redis.host=<host>
spring.redis.port=6379
spring.redis.password=<password>
#最大连接数
spring.redis.lettuce.pool.max-active=8
#最大空闲连接数
spring.redis.lettuce.pool.max-idle=8
#最小空闲连接数
spring.redis.lettuce.pool.min-idle=0
#连接等待时间
spring.redis.lettuce.pool.max-wait=1003.使用
java
@Autowired
private RedisTemplate redisTemplate; //注入依赖
@Test
public void RedisTest(){
redisTemplate.opsForValue().set("name","redis"); //使用RedisTemplate类对象进行操作
System.out.println(redisTemplate.opsForValue().get("name"));
}三、RedisTemplate工具类
RedisTemplate工具类中封装了各种对Redis的操作,并且将不同数据类型的操作API封装到了不同的类型中:
1.常用方法
2.RedisTemplate序列化方式
RedisTemplate可以接收任意Object作为值写入Redis,只不过写入前会把Object序列化为字节形式
缺点:可读性差,内存占用较大
a.解决方法一——自定义序列化方式


b.解决方法二——使用StringRedisTemplate
Spring默认提供了一个StringRedisTemplate类,它的key和value的序列化方式默认就是String方式。
java
@Autowired
private StringRedisTemplate stringRedisTemplate; //注入依赖
@Test
public void RedisTest(){
stringRedisTemplate.opsForValue().set("name","redis"); //使用stringRedisTemplate类对象进行操作
System.out.println(redisTemplate.opsForValue().get("name"));
}java
@Autowired
private StringRedisTemplate stringRedisTemplate; //注入依赖
//JSON工具
private static final ObjectMapper mapper = new ObjectMapper() ;
@Test
public void RedisTest(){
User user = new User("name", 18);
//手动序列化
String json=mapper.writeValueAsString(User);
stringRedisTemplate.opsForValue().set("user", json);
String val=stringRedisTemplate.opsForValue().get("user");
//手动反序列化
User newUser = mapper.readValue(val, User.class);
}