本地mac环境运行,跑起来存数据key和value不乱码,在win上测试了也不乱
但是到了线上环境,key前缀出现乱码 value 也全是前缀这种乱码
redisConfig已替换原JdkSerializationRedisSerializer:
本地mac环境运行,跑起来存数据key和value不乱码,在win上测试了也不乱
但是到了线上环境,key前缀出现乱码 value 也全是前缀这种乱码
redisConfig已替换原JdkSerializationRedisSerializer:
继续换下,看下有没有阿里系出的一些解析器来替换。
以实际情况看应该是序列化存储的时候字符集和服务器上的不一样。Linux服务器一般都是utf-8,而win开发环境很多是936,即使是utf-8,win里面还有个bom头问题。
现象描述
使用RedisTemplate操作redis数据,在相关的redis可视化工具中查看数据,如下图!虽然可视化工具显示如此,但不影响读写
解决办法
因为不影响读写,所以我选择忽视。
现象描述
RedisTemplate查询一个hash,输入正确的key,却不能查出来数据,使用命令keys *查询了下发现存入的值变乱码了
解决办法
实例化RedisTemplate时使用StringRedisSerializer(String序列化策略), 但是注意一点,由于采用了String的序列化策略,所以只接受value值类型为String的参数。
@Component
public class RedisUtils {
@Resource
private RedisTemplate<String, Object> redisTemplate;
// public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {
// this.redisTemplate = redisTemplate;
// }
//表示忽略当前要注入的bean,如果有直接注入,没有跳过,不会报错。
@Autowired(required = false)
public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {
RedisSerializer stringSerializer = new StringRedisSerializer(); //序列化为String
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); //序列化为Json
redisTemplate.setKeySerializer(stringSerializer);
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setHashKeySerializer(stringSerializer);
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
this.redisTemplate = redisTemplate;
}
}
27 回答13k 阅读
3 回答2.2k 阅读✓ 已解决
3 回答3.7k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
8 回答2.9k 阅读
4 回答2.3k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
解决了,乱码确实是不耽误读写的,但是业务有需求要通过其他服务删除对应key的value数据.服务器又禁止keys命令,首先从代码里是无法动态获取key的,只能写死.但是del的时候是删不掉的,加上乱码也删不掉(console里倒是可以),无奈只能先让数据不乱码,所以使用了stringRedisTemplate,kv确实都不乱了,但是v存的是list实体类,json数据.
不得已在存入阶段先
取的时候在
在转成list
返回前端