Redis之数据Set和Get类型不一致问题 |
您所在的位置:网站首页 › redis的用途和常用的数据类型不一样 › Redis之数据Set和Get类型不一致问题 |
开心一下
“大师,我本来就黑,一到夏天就晒的更黑了,别人都取笑我,我该怎么办?” 大师不言语,悠悠的把寺门打开,让阳光投射进来。 "我明白了大师,你是让我打开心扉,不要在乎别人的看法,对吗?" "不是,老衲只是想看清楚,施主你到底在哪!” 视频教程大家好,我录制的视频《Java之优雅编程之道》已经在CSDN学院发布了,有兴趣的同学可以购买观看,相信大家一定会收获到很多知识的。谢谢大家的支持…… 视频地址:http://edu.csdn.net/lecturer/994 提出问题把数据存到Redis中和取出,数据类型发生莫名其妙的改变??? 解决问题1.假设你们公司已经集成Redis 2.假设你已经了解一点Redis 3.那么开始吧 public void test(){ try { //new一个HashSet集合 Set set = new HashSet(); //添加数据 set.add("Ay"); set.add("Al"); set.add("Get"); set.add("Together"); //RedisUtils是公司自己封装的工具,最终还是调用 //RedisTemplate将数据存到缓存中 RedisUtils.set("TestSaveAndGet",set); System.out.println("休息下......"); //取出数据时,在这里会出错 Set mySet = (Set)RedisUtils.get("TestSaveAndGet"); } catch (Exception e) { e.printStackTrace(); } }结果如下: 发现Redis把原本为HashSet类型的数据,偷偷转变为ArrayList,造成该代码报错. 出现这样原因: 1.Redis后端代码将HashSet数据序列化到Redis缓存中,取得时候,再默认反序列化为ArrayList get方法源码如下:ValueDeserializingRedisCallback会执行数据的反序列化。 public V get(final Object key) { return execute(new ValueDeserializingRedisCallback(key) { protected byte[] inRedis(byte[] rawKey, RedisConnection connection) { return connection.get(rawKey); } }, true); }解决办法: 在不改变源码情况下,只能把返回来的数据转化为我们需要的数据。。 读书感悟来自《北京遇上西雅图之不二情书》 - 暗透了才看得见星光。要有向死而生的勇气。 - 深爱太伤人,毫无保留的把心交出去,就害怕有一天,得自己一个人疗伤。 - 人在哪儿,家在哪儿,人不在了,家在心里。 其他如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎转载,点赞,顶,欢迎留下宝贵的意见,多谢支持! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |