Redis之数据Set和Get类型不一致问题

您所在的位置:网站首页 redis的用途和常用的数据类型不一样 Redis之数据Set和Get类型不一致问题

Redis之数据Set和Get类型不一致问题

2023-09-15 11:52| 来源: 网络整理| 查看: 265

开心一下

“大师,我本来就黑,一到夏天就晒的更黑了,别人都取笑我,我该怎么办?” 大师不言语,悠悠的把寺门打开,让阳光投射进来。 "我明白了大师,你是让我打开心扉,不要在乎别人的看法,对吗?" "不是,老衲只是想看清楚,施主你到底在哪!”

视频教程

大家好,我录制的视频《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