2014-09-21 84 views
2

我,其中我必须根据特定日期的形式存储用户的日常统计资料,例如redis中的哈希或排序集?

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> 

其优点哈希我很困惑是否坚持现有的实现或用哈希来实现用例。有人可以帮忙吗?

回答

3

如果您不需要按值排序字段,那么使用排序集可能不是您问题的最佳解决方案。使用散列来存储用户字段值肯定更加惯用。

hmset user:1 field1 value1 field2 value2 field3 value3 

有序集可以用来存储到期日期。关键是用户标识,值是到期日期的unix时间戳。对于用户:1的截止日期将通过这样的命令被设置为1234567890:

zadd expirations 1 1234567890 

这将让你获得在一个操作当前时间过期的密钥列表,使用ZRANGEBYSCORE

UPDATE

你可以用简单的按键来存储你的数据:

SET user:1:field1 value1 
SET user:1:field2 value2 
SET user:1:field3 value3 

这将让你乐吨Redis的照顾到期: EXPIRE用户:1:FIELD1 EXPIRE用户:1:FIELD2 EXPIRE用户:1:字段3

Redis的算法,用于删除过期的密钥不会引入任何明显的延迟。使用它比实施自己的更好。如果你需要更多的细节,请看EXPIRE documentation

如果您想指定到期日期而不是持续时间,您也可以使用EXPIREAT。

+0

好的,谢谢。另外我的建议是为单独的字段分开散列?并且过期一键会占用很多的CPU开销? – 2014-09-21 18:02:26

+0

我更新了我的答案。 – 2014-09-21 19:25:54