我正在使用Redis来存储Java对象。例如,我有一个User(FirstName,LastName)类,每个用户有多个地址Address(Street,City)。
用户以Redis Hashes存储在数据库中:
HMSET user:0 firstname qwert lastname zuiop
由于地址在逻辑上与特定用户绑定,因此其密钥包括用户密钥:
HMSET user:0:addresses:0 street Teststreet city Exampletown
但是,我不确定如何提供以下功能:
基本上,我看到两个选项:
使用集合:
SADD user user:0
SADD user user:1
...
SMEMBERS user (to access list of users)
...
SADD user:0:addresses user:0:addresses:0
SADD user:0:addresses user:0:addresses:1
SMEMBERS user:0:addresses (to access list)
使用KEYS
KEYS user:* (to access list of users)
KEYS user:0:addresses:* (to access list of addresses)
这些方法有其他替代方案吗? 哪种方式更“Redis”?
答案 0 :(得分:2)
重要提示:请勿在生产中使用KEYS
- 它可以在Redis遍历密钥空间时阻止应用程序的请求。
list方法当然是一种方法,但我会考虑列表最终需要的空间量。或者,我将研究使用v2.8的新SCAN
命令以非阻塞方式迭代键名模式。