redis在本地存数据不乱码,部署的服务器上乱码?

本地mac环境运行,跑起来存数据key和value不乱码,在win上测试了也不乱

但是到了线上环境,key前缀出现乱码 value 也全是前缀这种乱码

redisConfig已替换原JdkSerializationRedisSerializer:


回答:

解决了,乱码确实是不耽误读写的,但是业务有需求要通过其他服务删除对应key的value数据.服务器又禁止keys命令,首先从代码里是无法动态获取key的,只能写死.但是del的时候是删不掉的,加上乱码也删不掉(console里倒是可以),无奈只能先让数据不乱码,所以使用了stringRedisTemplate,kv确实都不乱了,但是v存的是list实体类,json数据.
不得已在存入阶段先

JSON.toJSONString(baseModelList)

取的时候在

StrUtil.strip(json, "\"")去掉首尾的“

StringEscapeUtils.unescapeJava(strip)去掉多余的\

在转成list

JSON.parseArray(json)

返回前端


回答:

继续换下,看下有没有阿里系出的一些解析器来替换。

以实际情况看应该是序列化存储的时候字符集和服务器上的不一样。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;

}

}


回答:

redistemplate 的序列化没配置

以上是 redis在本地存数据不乱码,部署的服务器上乱码? 的全部内容, 来源链接: utcz.com/p/944804.html

回到顶部