使用java的Redis(缓存)中指向单个值的多个键
我想使用java的jedis(Redis缓存)存储多个单值键使用java的Redis(缓存)中指向单个值的多个键,java,caching,redis,hash-of-hashes,Java,Caching,Redis,Hash Of Hashes,我想使用java的jedis(Redis缓存)存储多个单值键 我有三个键,比如user\u 1,driver\u 10,admin\u 5和value=这是user,我想通过使用这三个键中的任何一个键来获取值。现在Redis不支持多个键指向同一个值,请参阅 你需要一个变通办法 下面的一些想法,可能是显而易见的,也可能是愚蠢的:) 可能有一个中间密钥: -user\u 10→ id_123 -driver_5→ id_123 -id\u 123→ 您不希望重复的数据 您可以在客户机代码或服务器上
我有三个键,比如
user\u 1
,driver\u 10
,admin\u 5
和value=这是user
,我想通过使用这三个键中的任何一个键来获取值。现在Redis不支持多个键指向同一个值,请参阅
你需要一个变通办法
下面的一些想法,可能是显而易见的,也可能是愚蠢的:)
可能有一个中间密钥:
-
user\u 10
→ <代码>id_123-
driver_5
→ <代码>id_123-
id\u 123
→ <代码>您不希望重复的数据
您可以在客户机代码或服务器上的自定义Lua脚本中实现该逻辑,并让客户机代码使用这些脚本(但我对此了解不够,无法提供详细信息)
如果您在客户端实现间接逻辑,并且如果访问不平衡,例如,您将在99%的时间内通过用户密钥访问数据,在1%的时间内通过驱动程序密钥访问数据,那么在99%的情况下,可能值得避免两次客户机-服务器往返。为此,您可以对重定向进行编码。例如,如果第一个字符是#
,则其余字符是数据。如果第一个字符是@
,则其余字符是实际的键
→ <代码>您不希望重复的数据user\u 10
→ <代码>@user_10driver_5
- 这是一个Lua脚本,可以在trafic上保存数据,并在一次调用中提取数据:
eval "return redis.call('get',redis.call('get',KEYS[1]))" 1 user-10
上述内容将返回请求数据。您能否澄清一下您的密钥是什么?是否
[用户\u 10,驾驶员\u 5]
包括括号?你用哪一种?绝地武士,杰雷迪斯?(不知道任何“JDI”)我想添加指向单个值的多个键,假设我有三个键,如user_1、driver_10、admin_5和value=“this is user”,我想使用三个键中的任意一个键来获取值我想添加指向单个值的多个键,假设我有三个键,如user_1、driver_10、admin_5和value=“这是用户“我想通过使用三个键中的任何一个键来获得值,然后我认为我理解正确,并且我的答案的第一个句子是相关的:目前不支持,所以你可以对链接的GITHUB问题进行评论,或者考虑工作区。你如何确保两个键都存在于同一个碎片/簇中?但这并不是它的目的。如果您需要类似的内容,您应该阅读其中解释的哈希标记。