为什么使用 redisson.getLocalCachedMap 和 redisson.getMapCache 时保存的数据存在差异

问题描述

如果我使用Redisson本地缓存选项redisson.getLocalCachedMap(),与redisson.getMapCache()相比,redis中保存的数据是不同的

如果我必须使用 EVALSHA 脚本中的本地缓存选项存储的数据,Redis 会给出异常。这是因为缺少使用直接 getMapCache 添加的额外字节 (\x00\x00\x00\x00\x00\x00\x00\x003\x00\x00\x00\x00\x00\x00\x00)。

下面是在 ProdTableCache 中保存 2 个产品的代码片段,第一次使用 getMapCache,第二次使用 getLocalCachedMap()

// save the prod to ProdTableCache
Product prod1 = new Product("DirectProd101","Mobile",1000);
Product prod2 = new Product("LocalProd101",1000);
String prodMapKey = "ProductTable";
final TypedJsonJacksonCodec prodCodec = new TypedJsonJacksonCodec(String.class,Product.class,new ObjectMapper());
RMapCache<String,Product> prodDirectMap = redisson.getMapCache(prodMapKey,prodCodec);
prodDirectMap.put(prod1.id,prod1);

RLocalCachedMap<Object,Object> prodLocalmap = redisson.getLocalCachedMap(prodMapKey,prodCodec,LocalCachedMapOptions.defaults());
prodLocalmap.put(prod2.id,prod2);

在 redis-cli 中看到不同之处,尽管两者都使用相同的编解码器来序列化/反序列化

127.0.0.1:6001> hget ProductTable "\"DirectProd101\""
"\x00\x00\x00\x00\x00\x00\x00\x003\x00\x00\x00\x00\x00\x00\x00{\"id\":\"DirectProd101\",\"name\":\"Mobile\",\"price\":1000}"
127.0.0.1:6001> hget ProductTable "\"LocalProd101\""
"{\"id\":\"LocalProd101\",\"price\":1000}"

那么是否需要任何额外的配置或者我遗漏了什么?

感谢您的帮助

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)