Java Redisson-RMapCache在值前面加上2个字节
我使用Redisson的RMapCache结构,因为它支持按生存时间和设置地图的最大大小逐出条目。虽然在Java中一切正常,但我发现使用相同Redis实例的NodeJS应用程序无法从相同的底层HSET结构中获取值 问题在于,当使用RMapCache时,Redisson会为HSET中的每个值预加2个字节: 在花了一些时间挖掘Redisson源代码之后,我找到了插入过程中使用的Lua脚本,它有以下几行:Java Redisson-RMapCache在值前面加上2个字节,java,lua,redis,redisson,Java,Lua,Redis,Redisson,我使用Redisson的RMapCache结构,因为它支持按生存时间和设置地图的最大大小逐出条目。虽然在Java中一切正常,但我发现使用相同Redis实例的NodeJS应用程序无法从相同的底层HSET结构中获取值 问题在于,当使用RMapCache时,Redisson会为HSET中的每个值预加2个字节: 在花了一些时间挖掘Redisson源代码之后,我找到了插入过程中使用的Lua脚本,它有以下几行: local val = struct.pack('dLc0', tonumber(ARGV
local val = struct.pack('dLc0', tonumber(ARGV[4]), string.len(ARGV[6]), ARGV[6]);
redis.call('hset', KEYS[1], ARGV[5], val);
ARGV[6]是值本身,因此其他两个字节是:
- 最大空闲时间(以毫秒为单位)(可传递给put方法)
- 价值长度
有人遇到过同样的问题并知道如何处理吗?
RMapCache
完全是一个Redisson产品,它支持有界容量和无界容量,并随时间推移逐出单个条目。没有其他语言和客户端支持这些功能,因为Redis不支持这些功能
Redisson将与各个元素相关的元信息打包在每个值的旁边,但这并不是使RMapCache
按预期工作所需的唯一技巧
其他客户端可以通过解包数据来读取值并忽略元数据,但是在不经过Redisson的情况下更改值可能会导致Redisson客户端出现意外行为