整合流程
1.导包
<!--整合redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.注入RedisTemplate进行缓存测试
//注入RedisTemplate
@Autowired
RedisTemplate redisTemplate;
@Test
void testRedisTemplate(){
ValueOperations ops = redisTemplate.opsForValue();
//设置键值对
ops.set("hello","world");
//通过键获取值
Object hello = ops.get("hello");
System.out.println(hello);
}
运行之后看到控制台成功打印了值,代表我们缓存成功
疑问
但是我们使用RedisTemplate时会有一个问题,我们打开Redis Desktop Manager,发现我们刚才存的键值对中的键为一串乱码,最后才是我们设置的键。
打开RedisTemplate源码我们发现
RedisTemplate在缓存数据的时候,键默认使用的序列化器为JdkSerializationRedisSerializer。
通常我们设置的键的数据类型都是String型,如果想要键直接显示我们设置的值,我们可以编写一个配置类,将RedisTemplate的默认序列化器设置为StringRedisSerializer
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public RedisTemplate<Object,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate<Object,Object> redisTemplate = new RedisTemplate<>();
//默认的key序列化器为:JDKSerializationRedisSerializer
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
}
再测试运行一次,控制台成功打印数据,且redis缓存的键也变成了我们设置的样子
同理,键值对中的值的序列化器我们也可以通过配置类的方式将其设置为我们想要的序列化器
添加模板
//注入RedisTemplate
@Autowired
RedisTemplate<String,String> redisTemplate;
@Test
void testRedisTemplate(){
ValueOperations<String, String> ops = redisTemplate.opsForValue();
//设置键值对
ops.set("hello","world");
//通过键获取值
Object hello = ops.get("hello");
System.out.println(hello);
}
为RedisTemplate提前设置泛型,也可以将键值对的序列化器改为模板中数据类型对应的序列化器
StringRedisTemplate
StringRedisTemplate键值对的默认序列化器都为StringRedisSerializer