关于 SpringBoot 整合 Redis 后应该在 yml 配置的东西(单机 & 集群)我写了一篇博客有说明,大家需要的话可以去看一看。
在完成常规的配置后,肯定需要写一个 Redis 配置类来解决序列化的问题,主要是设置 key 和 value 的序列化方式,hash 类型的 key 和 value 的序列化方式,具体配置类如下,希望能够给大家一定的参考。
@Configuration
public class RedisConfig {
/**
* *redis序列化的工具定置类,下面这个请一定开启配置
* *127.0.0.1:6379> keys *
* *1) “ord:102” 序列化过
* *2)“\xaclxedlxeelx05tixeelaord:102” 野生,没有序列化过
* *this.redisTemplate.opsForValue(); //提供了操作string类型的所有方法
* *this.redisTemplate.opsForList();// 提供了操作List类型的所有方法
* *this.redisTemplate.opsForset(); //提供了操作set类型的所有方法
* *this.redisTemplate.opsForHash(); //提供了操作hash类型的所有方认
* *this.redisTemplate.opsForZSet(); //提供了操作zset类型的所有方法
* param LettuceConnectionFactory
* return
*/
@Bean
public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(lettuceConnectionFactory);
// 设置key序列化方式string
redisTemplate.setKeySerializer(RedisSerializer.string()); // RedisSerializer.string() 等价于 new StringRedisSerializer()
// 设置value的序列化方式json,使用GenericJackson2JsonRedisSerializer替换默认序列化
redisTemplate.setValueSerializer(RedisSerializer.json()); // RedisSerializer.json() 等价于 new GenericJackson2JsonRedisSerializer()
// 设置hash的key的序列化方式
redisTemplate.setHashKeySerializer(RedisSerializer.string());
// 设置hash的value的序列化方式
redisTemplate.setHashValueSerializer(RedisSerializer.json());
// 使配置生效
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
如果是在服务器端查看数据,涉及到中文也会有序列化问题,我们可以在 redis 启动命令后加-raw
来解决序列化问题:
redis-cli -a 123456 -p 6379 -c -raw
其中-a 代表密码,-p 代表端口(默认 6379),-c 为防止路由失效的参数(自动切换到符合当前命令要求的 slot 槽位所在的 redis 服务器)。