SpringDataRedis
SpringData是Spring中数据操作的模块,包括对各种数据库的集成,其中对Redis的集成模块叫做SpringDataRedis
那么我们该如何使用SpringData来操作Redis呢?其提供了RedisTemplate统一API来操作Redis;并且将不同数据类型的操作API封装到不同类型中;

RedisTemplate
快速入手
1.新建Springboot项目,引入依赖


第一个依赖有了,建立完项目后还需要自己手动引入第二个依赖
XML
<!--common-pool -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
2.在yml配置文件的信息
XML
spring:
data:
redis:
host: 127.0.0.1
port: 6379
password: # 没有设置密码就留空
database: 0 # 使用 DB0
timeout: 3000ms
lettuce:
pool:
max-active: 8
max-wait: -1ms
max-idle: 8
min-idle: 0
3.注入RedisTemplate

4.编写测试
java
@SpringBootTest
class RedistemplatedemoApplicationTests {
@Autowired
RedisTemplate redisTemplate;
@Test
void testString() {
redisTemplate.opsForValue().set("add", "张三");
System.out.println(redisTemplate.opsForValue().get("add"));
}
}
但是此时发现存储到Redis中为下述,而非add:

这是因为 RedisTemplate 默认存键的时候会自动加前缀和序列化 ,实际存进去的 key 不是纯粹的 add,而是类似这样的:
\xac\xed\x00\x05t\x00\x03add
所以你在工具里直接搜 add 当然找不到。解决办法有两个,都是RedisTemplate的两种序列化实践方案:
RedisTemplate序列化
- 方式一:用 StringRedisTemplate代替 RedisTemplate(推荐)
java
@Autowired
StringRedisTemplate stringRedisTemplate;
@Test
void testString() {
stringRedisTemplate.opsForValue().set("add", "张三");
System.out.println(stringRedisTemplate.opsForValue().get("add"));
}
StringRedisTemplate 存的 key 和 value 都是纯字符串,在工具里直接 get add 就能看到。
- 方式二:自定义 RedisTemplate 的序列化方式
新建一个配置类,这样存的 key 就是正常字符串了,工具里也能直接看到。
java
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
// 创建 RedisTemplate 对象
RedisTemplate<String, Object> template = new RedisTemplate<>();
// 设置 RedisConnectionFactory
template.setConnectionFactory(factory);
// key 使用 String 序列化
template.setKeySerializer(RedisSerializer.string());
template.setHashKeySerializer(RedisSerializer.string());
// value 使用 Java 原生序列化(无需 Jackson)
template.setValueSerializer(RedisSerializer.java());
template.setHashValueSerializer(RedisSerializer.java());
return template;
}
}
RedisTemplate的两种序列化实践方案:
方案一:
自定义RedisTemplate
修改RedisTemplate的序列化器为GenericJackson2JsonRedisSerializer
方案二:
- 使用StringRedisTemplate
2.写入Redis时,手动把对象序列化为JSON
3.读取Redis时,手动把读取到的JSON反序列化为对象