我正在关注这个Redis教程http://redis.io/topics/twitter-clone
在页面的最后他们说
注意:如果帖子列表开始非常大,并且我们想要访问列表中间的元素,则LRANGE效率不高,因为Redis列表由链表支持.如果系统设计用于对数百万个项目进行深度分页,则最好采用分类集.
这是我最担心的,因为我们正在设计一个系统,应该能够处理数百万甚至数十亿的帖子,我们估计一个项目将在列表中间搜索20-30%的web应用程序在跑.
排序集有一个问题..您可以添加如下所示的排序集,考虑到它是第一个(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']和post['content'](理论上,我还没有尝试过),也有这个事实,我们不能克服截至目前.
实际上post对象的结构是这样的,它应该在O(1)时间内找到,即使在百万个post对象的中间也是如此
+-----------+
+- 1 <- ID -+
+-----------+
+------------------------+
+- title "the title..." -+
+----------------------------+
+- content "the content..." -+
+-----------------------------+
+- tags "1st tag, 2nd tag.." -+
+-----------------------+
+- author "the_author" -+
+-------------------------+
+- date "unix_timestamp" -+
+-------------------------+
如果Sorted Set是正确使用的数据结构,我会感到很茫然,如果不是,那么应该使用什么(设置,排序集,列表,哈希......).
在这种情况下你会建议什么?
排序集是您想要排序的内容的理想数据结构,但正如您所指出的,该集的成员是字符串。既然如此,您有两种可能的选择:
序列化:您可以实现自己的序列化或使用现成的序列化(例如 JSON)在集合的每个成员中存储多个元素。
让集合成员的内容成为其他键的名称,并将对象存储在这些引用的键中 - HASH 数据类型看起来很适合您的需求。
| 归档时间: | 
 | 
| 查看次数: | 905 次 | 
| 最近记录: |