我的网站上有一个用例,我需要以
的形式存储用户特定的日常统计信息user:1 {field1: value, field2: value, field3: value}
以上表示适用于n个用户 目前,我已经使用有序集来实现它,其中字段表示有序集的值和表示得分的值。我也在设置每日到期日期。
考虑到当用户数量变大时个人密钥创建和到期的开销,我正在考虑使用哈希考虑其优势的替代表示,如下所示
Map of field1 <user_id, value>
Map of field2 <user_id, value>
Map of field3 <user_id, value>
Also a map for expiry <user_id, last_updated_time>
我很困惑是继续使用现有的实现还是用哈希实现用例。有人可以帮忙吗?
答案 0 :(得分:3)
如果您不需要按值对字段进行排序,则使用排序集可能不是解决问题的最佳方法。使用哈希来存储用户字段值肯定更具惯用性。
hmset user:1 field1 value1 field2 value2 field3 value3
有序集可用于存储到期日。关键是用户id,即到期日期的unix时间戳的值。对于用户:1,过期日期将通过如下命令设置为1234567890:
zadd expirations 1 1234567890
这将允许您使用ZRANGEBYSCORE
在一次操作中获取当前时间的过期密钥列表<强>更新强>
您可以使用简单的密钥来存储数据:
SET user:1:field1 value1
SET user:1:field2 value2
SET user:1:field3 value3
它允许你让Redis处理到期: EXPIRE用户:1:field1 EXPIRE用户:1:field2 EXPIRE用户:1:field3
用于删除过期密钥的Redis算法不会引入任何明显的延迟。使用它肯定比实现自己更好。如果您需要更多详细信息,请查看EXPIRE documentation。
如果要指定到期日期而不是持续时间,也可以使用EXPIREAT。