我正在使用 Redisson 的 RMapCache 结构,因为它支持按生存时间和设置地图的最大大小来逐出条目。虽然在 Java 中一切正常,但我发现使用相同 Redis 实例的 NodeJS 应用程序无法从相同的底层 HSET 结构中获取值。
问题是当使用 RMapCache 时,Redisson 会在 HSET 中的每个值前添加 2 个字节:
在花一些时间研究 Redisson 源代码后,我发现插入过程中使用的 Lua 脚本有以下几行:
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 方法)
- 价值长度
这有效地使 Redis HSET 无法从 Redisson 以外的其他语言或 Java 客户端使用。
有人遇到过同样的问题并知道如何处理吗?