使用 Java 在 Redis(缓存)中指向单个值的多个键

2022-09-04 08:29:17

我想使用带有Java的jedis(Redis缓存)使用单个值存储多个密钥。

我有三个键,如 、 和 value = ,我想通过使用这三个键中的任何一个键来获得值。user_1driver_10admin_5this is user


答案 1

Redis 目前不支持将多个键指向同一值,请参阅问题 #2668

您需要一个解决方法。

下面的一些想法,可能是明显或愚蠢的:)


也许有一个中间键:
- →
- →
- →user_10id_123driver_5id_123id_123data_that_you_dont_want_to_duplicate

您可以在客户端代码或服务器上的自定义Lua脚本中实现该逻辑,并让您的客户端代码使用这些脚本(但我对此知之甚少,无法提供详细信息)。

如果在客户端实现间接寻址逻辑,并且访问不平衡,例如,在 99% 的时间内通过用户密钥访问数据,在 1% 的时间内通过驱动程序密钥访问数据,则对于 99% 的情况,可能值得避免 2 次客户端-服务器往返。为此,您可以对重定向进行编码。例如,如果第一个字符是,则其余字符是数据。如果第一个字符是,则其余部分是实际的关键。#@

  • user_10#data_that_you_dont_want_to_duplicate
  • driver_5@user_10

答案 2

下面是一个 Lua 脚本,可以保存 trafic,并在一次调用中拉取数据:

eval "return redis.call('get',redis.call('get',KEYS[1]))" 1 user-10

上述操作将返回请求数据。