按小时在Redis中存储和检索记录

时间:2014-02-07 23:35:29

标签: redis

我试图以一种我可以通过电话号码和时间戳(实际上是unix纪元以来的小时数)快速查找的方式在Redis中存储电话记录。

所以数据是这样的:

Phone #     | Hour   | Data
------------+--------+-------------------
15551231234 | 386615 | "call record 1..."
15551231234 | 386615 | "call record 2..."

我需要能够获取指定电话号码的所有数据,以及范围内的小时数(例如:过去24小时)。

Redis存储和检索此数据形式的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

Redis对于任意范围查询来说不是一个很好的解决方案:你可能会更好地通过关系数据库或像MongoDB这样的服务。

现在,因为您的范围查询适用于数值,您可以使用zset(有序集)来表示您的数据。

# adding a new call
ZADD <phone> <hour> <call data>

# find calls for a given phone number in a range
ZRANGEBYSCORE <phone> <hour begin> <hour end> WITHSCORES

每个返回的项目都是一对时间戳和呼叫数据。

请注意,使用此数据结构无法找到给定范围内的所有电话(仅拨打范围内给定电话号码)。