Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redis:我如何按键对哈希进行排序?_Redis - Fatal编程技术网

Redis:我如何按键对哈希进行排序?

Redis:我如何按键对哈希进行排序?,redis,Redis,假设我有一些新闻存储在散列中。我有不同的散列(每个散列代表一条新闻): 我想用keys命令检索所有键,如下所示: KEYS news:* 密钥未排序的问题: news:3 news:1 news:2 我想按正确的顺序检索密钥列表。我不确定散列是否是我需要的结构。但是,根据该报告: Redis散列是字符串字段和字符串值之间的映射,因此它们是表示对象的完美数据类型(例如,具有许多字段(如姓名、姓氏、年龄等)的用户): 将我的新闻对象存储在散列中似乎是个好主意 有什么建议吗?把Redis哈希看作索

假设我有一些新闻存储在散列中。我有不同的散列(每个散列代表一条新闻):

我想用keys命令检索所有键,如下所示:

KEYS news:*
密钥未排序的问题:

news:3
news:1
news:2
我想按正确的顺序检索密钥列表。我不确定散列是否是我需要的结构。但是,根据该报告:

Redis散列是字符串字段和字符串值之间的映射,因此它们是表示对象的完美数据类型(例如,具有许多字段(如姓名、姓氏、年龄等)的用户):

将我的新闻对象存储在散列中似乎是个好主意


有什么建议吗?

把Redis哈希看作索引文档

HSET news:1 title levy_breaks
HSET news:1 type breaking_news
HSET news:1 byline alphazero
HSET news:1 date 04:25:2011
HSET news:1 content <the story>

HSET news:2 ...
..
HSET新闻:1篇标题
HSET新闻:1类突发新闻
HSET新闻:1署名alphazero
HSET新闻:1日期4:25:2011
HSET新闻:1内容
HSET新闻:2。。。
..
在上面的例子中,
news:1
是“哈希键”,后面是“哈希字段”,最后是它的关联值

也就是说,似乎您只是想对“哈希键”进行排序

使用
MULTI/EXEC
构造来设置新闻项的所有字段(有n个字段),最后还将哈希键(例如,您的新闻项)添加到排序集。或者,您也可以将它们添加到列表中,然后在该列表上使用
排序
命令


.

您可以做的是存储一组或一组现有的新闻项目。例如,当您创建一个新的新闻项目时,比如说
news:4
,您可以将索引4添加到一个集合中,比如说
list:news
,该集合现在将具有
[1,2,3,4]

现在假设您的新闻哈希结构是date,author。在此基础上,您可以执行以下操作:

sort list:news get *->some_value_a ->*->some_value_b

是否可以检测何时将某个键添加到我的字典中,然后将该键添加到我的排序列表中?如果没有该功能,我如何确保我的排序列表在任何时候都包含哈希中的完整键?谢谢。Redis支持发布/订阅语义。因此,您可以在multi/exec块中添加一个publishthenews:xxx键(例如,到“news:channel”)。看见一定要问redis google小组,因为很可能有更有效的方法来完成这项工作。如果你想对密钥进行排序,你确定这是一个哈希而不是你想要的列表吗?@Theo,这是我问题的一部分。见下文;)
sort list:news get *->some_value_a ->*->some_value_b