开心一下
“大师,我本来就黑,一到夏天就晒的更黑了,别人都取笑我,我该怎么办?”
大师不言语,悠悠的把寺门打开,让阳光投射进来。
"我明白了大师,你是让我打开心扉,不要在乎别人的看法,对吗?"
"不是,老衲只是想看清楚,施主你到底在哪!”
提出问题
数据存入Redis和取出,数据类型发生莫名其妙的改变???
解决问题
1.假设你们公司已经集成Redis
2.假设你已经了解一点Redis
3.那么开始吧
public void test(){
try {
//new一个HashSet集合
Set<String> 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<String> 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);
}
解决办法:
在不改变源码情况下,只能把返回来的数据转化为我们需要的数据。。
读书感悟
来自《北京遇上西雅图之不二情书》
- 暗透了才看得见星光。要有向死而生的勇气。
- 深爱太伤人,毫无保留的把心交出去,就害怕有一天,得自己一个人疗伤。
- 人在哪儿,家在哪儿,人不在了,家在心里。