前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis 可视化软件乱码问题(Java序列化重置)

Redis 可视化软件乱码问题(Java序列化重置)

作者头像
摸鱼的G
发布2023-02-22 11:42:30
1.1K0
发布2023-02-22 11:42:30
举报
文章被收录于专栏:火属性小虫

Redis 可视化软件乱码问题(Java序列化重置)

Redis有许多可视化软件,但直接使用这些软件来查看Redis会发现是一堆乱码。

原因是Redis是独立软件,并且不是Java开发的,所以Java程序存入Redis数据时,会把数据序列化。

而Java默认的序列化方式,是把内容编程字节码,计算机能识别,但人就识别不了,看起来像乱码

解决办法

为解决这个问题,我们需要通过方法重置序列化方式

创建一个Config类(并写上注解)

写入方法:

代码语言:javascript
复制
@Bean
public RedisTemplate redisTemplateInit() {
  //设置序列化Key的工具
  redisTemplate.setKeySerializer(new StringRedisSerializer());
  //设置序列化Value的工具
  redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
  // 设置 hash 的 key
  redisTemplate.setHashKeySerializer(new GenericJackson2JsonRedisSerializer());
  // 设置 hash 的 value
  redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
  redisTemplate.afterPropertiesSet();
  return redisTemplate;
}

Redis数据的key用字符串(StringRedisSerializer)的序列化/反序列化方式,Value 用 JSON(

GenericJackson2JsonRedisSerializer)的序列化/反序列化方式。

hash是一种Redis的数据类型。setHashKeySerializer() 和 setHashValueSerializer()是支持hash的。

添加了config类后,因为序列化方式改变,所以旧数据不再兼容。

新问题

此时,如果我们想插入时间会出错,原因是存入时需要序列化,而我们设定的GenericJackson2JsonRedisSerializer 并不支持LocalDateTime,所以在模型的时间属性上,需要多加两个注解:

引入包:

代码语言:javascript
复制
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
代码语言:javascript
复制
public class Category implements Serializable {

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
    @JsonSerialize(using = LocalDateTimeSerializer.class)
    private LocalDateTime gmtCreated;

}
  • @JsonSerialize 注解用于指定 序列化 的工具类,推荐 LocalDateTimeSerializer
  • @JsonDeserialize 注解用于指定 反序列化 的工具类,推荐 LocalDateTimeDeserializer

LocalDate 有对应的 LocalDateSerializer 和 LocalDateDeserializer;LocalTime 有对应的 LocalTimeSerializer 和 LocalTimeDeserializer

@JsonFormat 是指定时间格式。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Redis 可视化软件乱码问题(Java序列化重置)
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档