我希望使用Jedis(Redis缓存)和Java存储一个值对应多个键。
我有三个键,如user_1
、driver_10
、admin_5
,值为this is user
,我想通过任意一个键获取它的值。
我希望使用Jedis(Redis缓存)和Java存储一个值对应多个键。
我有三个键,如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%的情况下通过驱动程序键访问数据,则避免2个客户-服务器轮换在99%的情况下可能是值得的。为此,您可以编码重定向。例如,如果第一个字符是#
,则其余部分是数据。如果第一个字符是@
,则其余部分是实际键。
user_10
→ #data_that_you_dont_want_to_duplicate
driver_5
→ @user_10
#data_that_you_dont_want_to_duplicate
无效。我可以使user_10
无效,但是在Redis中,driver_5 -> @user_10
键值对如何清理呢? - OscarVanL这是一个Lua脚本,可以节省流量,并在一次调用中获取数据:
eval "return redis.call('get',redis.call('get',KEYS[1]))" 1 user-10
[user_10,driver_5]
的吗?你正在使用哪个Redis Java客户端?jedis,jredis?(不知道有“jdis”) - Hugues M.