Skip to content

第十章 Spring Data Redis v1.0 ​

第一部分 Spring Data Redis ​

Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis

一、简介 ​

1.作用 ​

  1. 提供了对不同Redis客户端的整合(Lettuce和Jedis)
  2. 提供了Redis Template统一API来操作Redis
  3. 支持Redis的发布订阅模型
  4. 支持Redis哨兵和Redis集群
  5. 支持基于Lettuce的响应式编程
  6. 支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化
  7. 支持基于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=100

3.使用 ​

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.解决方法一——自定义序列化方式 ​

image.png

image.png

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);
}