使用 Java 在 Redis(缓存)中指向单个值的多个键
2022-09-04 08:29:17
我想使用带有Java的jedis(Redis缓存)使用单个值存储多个密钥。
我有三个键,如 、 和 value = ,我想通过使用这三个键中的任何一个键来获得值。user_1
driver_10
admin_5
this is user
我想使用带有Java的jedis(Redis缓存)使用单个值存储多个密钥。
我有三个键,如 、 和 value = ,我想通过使用这三个键中的任何一个键来获得值。user_1
driver_10
admin_5
this is user
Redis 目前不支持将多个键指向同一值,请参阅问题 #2668。
您需要一个解决方法。
下面的一些想法,可能是明显或愚蠢的:)
也许有一个中间键:
- →
- →
- →user_10
id_123
driver_5
id_123
id_123
data_that_you_dont_want_to_duplicate
您可以在客户端代码或服务器上的自定义Lua脚本中实现该逻辑,并让您的客户端代码使用这些脚本(但我对此知之甚少,无法提供详细信息)。
如果在客户端实现间接寻址逻辑,并且访问不平衡,例如,在 99% 的时间内通过用户密钥访问数据,在 1% 的时间内通过驱动程序密钥访问数据,则对于 99% 的情况,可能值得避免 2 次客户端-服务器往返。为此,您可以对重定向进行编码。例如,如果第一个字符是,则其余字符是数据。如果第一个字符是,则其余部分是实际的关键。#
@
user_10
→#data_that_you_dont_want_to_duplicate
driver_5
→@user_10
下面是一个 Lua 脚本,可以保存 trafic,并在一次调用中拉取数据:
eval "return redis.call('get',redis.call('get',KEYS[1]))" 1 user-10
上述操作将返回请求数据。