我正在关注此Redis教程http://redis.io/topics/twitter-clone
在页面末尾,他们说
注意:如果帖子列表开始很大,则LRANGE效率不高,并且我们希望访问列表中间的元素,因为Redis列表由链接列表支持。如果系统设计用于深度分页处理数百万个项目,则最好改用Sorted Sets。
这是我最大的担心,因为我们正在设计一个系统,该系统应该能够处理数百万甚至数十亿个帖子,并且我们估计在Web应用程序中20-30%的时间将在列表中间搜索一个项目在跑。
不过,排序集存在问题。您可以添加如下所示的排序集,并考虑到这是第一(1)个帖子
zadd zset 1 "We are happy to announce a new member in our team"
但是,如果我们也需要添加一个内容字段怎么办?
zadd zset 1 "We are happy to announce a new member in our team" "Please welcome James Sullivan, our new member team! He had..."
这是你得到的错误
(error) ERR syntax error
除了您必须访问诸如post[0]
和post[1]
而不是post['title']
and之类的奇怪事实post['content']
(理论上,我还没有尝试过)之外,还有一个事实是我们到目前为止无法解决。
实际上,发布对象的结构是这样的,即使在百万个发布对象的中间,它也应该可以在O(1)时间内找到
+-----------+
+- 1 <- ID -+
+-----------+
+------------------------+
+- title "the title..." -+
+----------------------------+
+- content "the content..." -+
+-----------------------------+
+- tags "1st tag, 2nd tag.." -+
+-----------------------+
+- author "the_author" -+
+-------------------------+
+- date "unix_timestamp" -+
+-------------------------+
如果“排序集”是要使用的正确数据结构,而不是应该使用哪种集(排序集,排序集,列表,散列..),我将一头雾水。
在这种情况下,您有什么建议?
排序集是您想要排序的东西的理想数据结构,但是,正如您所指出的,集合的成员是字符串。在这种情况下,您有两个可能的选择:
序列化:您可以实现自己的序列化或使用就绪的东西(例如JSON)在集合的每个成员中存储多个元素。
将您设置的成员的内容作为其他键的名称,并将对象存储在这些引用的键中-HASH数据类型看起来很符合您的需求。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句