我对Redis有点新意,所以如果这是基本的话,请原谅。
我正在开发一个应用程序,可以针对特定事件向用户发送自动回复。我想用Redis来存储谁收到了什么事件。
基本上,在ruby中,数据结构看起来像这样,你有一个事件用户地图和每个事件发送的日期。
{
"mary@example.com" => {
"sent_comment_reply" => ["12/12/2014", "3/6/2015"],
"added_post_reply" => ["1/4/2006", "7/1/2016"]
}
}
在Redis数据结构中表示这一点的最佳方法是什么,所以你可以问,Mary是否得到了sent_comment_reply?如果是的话,什么时候是最新的?
简而言之,问题是,如何(如果可能的话)你可以在Redis中拥有一个包含数组的Hash结构。
与使用带有复合键的集合或列表相反的基本原理是散列具有O(1)查找时间,而列表(lrange)和集合(smembers)上的查找将是O(s + n)和集合O(n),分别。
答案 0 :(得分:0)
在Redis中构建它的一种方法,取决于你知道用户事件的想法,并且你希望最新的内存是新的:
每个用户的有序集。排序集的内容将是事件代码; sent_comment_reply
,added_post_reply
,最新活动的得分为最高。您可以使用ZRANK
来获得问题的答案:
Mary收到了sent_comment_reply吗?
也为用户提供了一个哈希,这次你将该字段作为事件sent_comment_reply
,其值是应该用最新值更新的内容,包括正文,日期,这将回答这个问题:
如果是的话,什么时候是最新的?
注意:Sorted sets are really fast,在此示例中,我们依赖于事件作为数据。
使用排序集,您可以添加,删除或更新元素 快速的方式(在与数量的对数成比例的时间内 元件)。由于元素按顺序排列而不是有序 之后,您还可以按分数或等级(位置)获取范围 一个非常快的方式。访问排序集的中间也非常 快速,因此您可以使用排序集作为非重复的智能列表 您可以快速访问所需内容的元素:元素 订单,快速存在测试,快速访问中间的元素!
答案 1 :(得分:0)
使用散列映射数组的可能方法如下:
add_element(key , value):
len := redis.hlen(key)
redis.hset(key , len , value)
这会将array[i]
元素映射到散列键中的i
字段。
这适用于某些情况,但我可能会回答https://stackoverflow.com/a/34886801/2868839
中建议的答案