【发布时间】:2012-07-24 01:16:10
【问题描述】:
我正在我的网站上制作一个真正简单的评论系统,使用列表;
通过 LPUSH 使用评论项目的 id 完成发布。检索通过 LRANGE 完成,然后通过结果数组循环。
我想知道这是否是处理 cmets 的最佳方式?在性能层面上这是个好主意吗?
另外,我将如何进行审核?这似乎不是从列表中删除特定项目的方法。
提前致谢。
【问题讨论】:
标签: redis
我正在我的网站上制作一个真正简单的评论系统,使用列表;
通过 LPUSH 使用评论项目的 id 完成发布。检索通过 LRANGE 完成,然后通过结果数组循环。
我想知道这是否是处理 cmets 的最佳方式?在性能层面上这是个好主意吗?
另外,我将如何进行审核?这似乎不是从列表中删除特定项目的方法。
提前致谢。
【问题讨论】:
标签: redis
如果您希望能够根据索引删除 cmets,而不是使用 LREM(根据列表项值查找和删除),您可以使用集合和哈希。
为每个帖子保留一个简单的集合,其中包含该帖子上 cmets 的 id:
SADD Comments:post:1 1
SADD Comments:post:1 2
(这将标记帖子 ID 1 具有 cmets ID 1 和 2)
然后为每条评论设置一个哈希键:
HSET Comments:1 1 "This will be a comment for post 1"
HSET Comments:1 2 "A second comment for the same post"
然后您可以查询哈希 Comments:1 以获取所有 cmets,例如帖子 ID 1:
HGETALL Comments:1
删除单个评论的方法如下:
SREM Comments:post:1 1
HDEL Comments:1 1
(此处删除第一条评论)。
【讨论】:
O(N) 采用O(1)(例如删除1 项),而在LREM 中,N 是列表的长度。