redis 序列化getset获取不到原因记录
Posted Doyourself!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis 序列化getset获取不到原因记录相关的知识,希望对你有一定的参考价值。
最近项目里面出现了个bug,把数据从数据库中读取后又存取到redis里面,之后再读取。奇怪的是,有一个 字段读取不到。
public class Circle { private String id; // 圈子主键ID private String code; // 圈子编码 private String name; // 圈子名称 private String logo; // 圈子头像 private String parentType;// 圈子分类父ID private String type; // 圈子分类 private String introdruce; // 圈子简介 private String advertise; // 圈子公告 private String creator; // 圈子创建人,圈主,关联名片ID private Date createTime; // 创建时间 private long updateTime; // 更新时间 private int permission = -1; // 加入权限 1暗号,2审核,0直接加入 private String password; // 圈子暗号 private long passwordExpire = -1; // 圈子暗号失效时间 private int permissionView = -1; // 圈子是否对所有人可见 0:是1:否 private int topNum; // 推荐排序 private int orderNum; // 推荐排序 private String province; // 省名称 private String city; // 市名称 private int provinceCode; // 省代码 private int cityCode; // 市代码 private String qrCode;//社群二维码 private int state; // 删除状态 1删除,0未删除 2 封号 private int tId;//云信ID private int bill; // 是否有群钱包权限, 0没有,1有 private int videoLiveAuth; // 是否有视频授权权限, 0没有,1有 private int audioLiveAuth; // 是否有音频授权权限, 0没有,1有 private String shareUrl;//静态化分享地址 private int muteState; //社群禁言状态 1全体禁言 0全体解除禁言 (默认) private int chatState;// 私聊状态 0 可以私聊 (默认) 1 禁止私聊 private Integer dynamicOrder; //动态排序字段 private String adPic;//广告图片 private String adUrl;//广告链接 private String noticePic;//公告图片 private String noticeUrl;//公告链接 private String tip; //群打赏 private String sealReason; //社群封号原因 private String yunId; //省略get set代码 }
没有获取的字段是pId,存取的时候 先从数据库中读取,这个时候是有值的。再把整个对象 序列化后存取。但是读的时候总是0.
原因就是:使用idea的get/set快捷生成建的方法:
public int gettId() {return tId; } public void settId(int tId) {
this.tId = tId; }
经过redis序列化是获取不到的。
而且这个get set 也不太标准,具体的源码没找到,但是把 tId改成tid 再重新生成get set方法是可以获取的了。因为这个类使用到的地方太多,缓存采取的策略是 重新写一个 entity,把tid重新赋值,然后把这个新的entity 放到缓存里面。这样既可获取。
以上是关于redis 序列化getset获取不到原因记录的主要内容,如果未能解决你的问题,请参考以下文章
fix bug:Redis序列化算法不一致导致乱码问题的原因及自定义序列化解决方案
Springboot使用redis的setnx和getset实现并发锁、分布式锁
项目中redisTemplate设置的key,redis客户端上查询不到的问题