在redis中设置哈希或排序?

时间:2014-09-21 14:23:46

标签: redis hash sortedset

我的网站上有一个用例,我需要以

的形式存储用户特定的日常统计信息
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>

我很困惑是继续使用现有的实现还是用哈希实现用例。有人可以帮忙吗?

1 个答案:

答案 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。