gpt4 book ai didi

java - Redisson - RMapCache 将 2 个附加字节添加到值前面

转载 作者:可可西里 更新时间:2023-11-01 11:16:49 27 4
gpt4 key购买 nike

我正在使用 Redisson 的 RMapCache 结构,因为它支持按生存时间和设置映射的最大大小来逐出条目。虽然在 Java 中一切正常,但我发现使用相同 Redis 实例的 NodeJS 应用程序无法从相同的底层 HSET 结构中获取值。

问题在于,当使用 RMapCache 时,Redisson 会在 HSET 中的每个值前添加 2 个字节: enter image description here

在深入研究 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 客户端使用。

有没有人遇到同样的问题并且知道如何处理?

最佳答案

RMapCache 完全是 Redisson 创建的,它支持有界和无界容量,并根据生存时间逐出单个条目。没有其他语言和客户端支持这些功能,因为 Redis 不支持它们。

Redisson 将与各个元素相关的元信息与每个值一起打包,但这并不是它使 RMapCache 按预期工作所必须采用的唯一技巧。

其他客户端可能能够通过解包数据并忽略元数据来读取值,但不通过 Redisson 更改值可能会导致 Redisson 客户端发生意外行为。

关于java - Redisson - RMapCache 将 2 个附加字节添加到值前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46393127/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com