【发布时间】:2011-10-02 22:44:48
【问题描述】:
我正在尝试使用 Redis 数据库构建评论系统,我目前正在使用哈希来存储评论数据,但我面临的问题是在 10 或 12 cmets 之后,cmets 失去了顺序并开始随机出现,任何人知道应该使用什么数据类型来使用 Redis 构建评论系统,目前我的哈希是这种形式。
postid:cmets commentid:userid "Testcomment"
谢谢,我们将不胜感激。
【问题讨论】:
我正在尝试使用 Redis 数据库构建评论系统,我目前正在使用哈希来存储评论数据,但我面临的问题是在 10 或 12 cmets 之后,cmets 失去了顺序并开始随机出现,任何人知道应该使用什么数据类型来使用 Redis 构建评论系统,目前我的哈希是这种形式。
postid:cmets commentid:userid "Testcomment"
谢谢,我们将不胜感激。
【问题讨论】:
设置哈希是为了通过键快速访问而不是按顺序检索。如果您需要按特定顺序排列的项目,请尝试使用列表或排序集。
它最初似乎起作用的原因是对小型集合的优化 - 当您只有少量项目时,列表是最有效的结构,所以这就是 redis 内部使用的结构。当您获得更多项目时,需要一个实际的 hashmap 来进行高效查询,并且 redis 会重新排列数据,以便按 hash 排序而不是按插入顺序。
【讨论】:
在我的网络应用中,我使用的是这样的格式。
(appname):(postid):(comment id) - The hash of the posts
(appname):(postid):count - The latest comment id
然后我查询 (appname):(postid):count 键以获取我应该运行一个循环以获取 (appname):(postid):(comment id) 哈希的内容的次数。
示例代码
$c = $redis->get('(appname):(postid):count');
for($i = 0; $i<$c; $i++) {
var_dump($redis->hgetall('(appname):(postid):'.$i));
}
【讨论】: