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,我有一个Redis数据库,其结构如下 而且,我只想在一个查询中得到第一级键。我的意思是:[EB,HY,LV,LW,MB,NV] 我想到了键*,它返回数据库中的每个键。在那之后,我会循环所有的关键点,分割关键点并计算每个关键点的外观。但是它需要代码,当然,如果可能的话,我希望在一行中得到期望的结果 有人知道怎么帮我吗?非常感谢 而且,我只想在一个查询中得到第一级键。我的意思是:[EB,HY,LV,LW,MB,NV] 这些“钥匙”根本不存在。它们是您的redis GUI的创建。Redis自己也不知

我有一个Redis数据库,其结构如下

而且,我只想在一个查询中得到第一级键。我的意思是:
[EB,HY,LV,LW,MB,NV]

我想到了
键*
,它返回数据库中的每个键。在那之后,我会循环所有的关键点,分割关键点并计算每个关键点的外观。但是它需要代码,当然,如果可能的话,我希望在一行中得到期望的结果

有人知道怎么帮我吗?非常感谢

而且,我只想在一个查询中得到第一级键。我的意思是:[EB,HY,LV,LW,MB,NV]

这些“钥匙”根本不存在。它们是您的redis GUI的创建。Redis自己也不知道。正如您所注意到的,您的真正钥匙如下表所示:

EB:0V:...
EB:400V:....
HY:0V:...
HY:400V:...
redis中没有返回部分键名的命令。这将在你的应用程序中处理。获取完整的密钥名、冒号拆分、聚合

而且,我只想在一个查询中得到第一级键。我的意思是:[EB,HY,LV,LW,MB,NV]

这些“钥匙”根本不存在。它们是您的redis GUI的创建。Redis自己也不知道。正如您所注意到的,您的真正钥匙如下表所示:

EB:0V:...
EB:400V:....
HY:0V:...
HY:400V:...

redis中没有返回部分键名的命令。这将在你的应用程序中处理。获取全键名,在冒号上拆分,聚合。

首先,正如Sergio Tulentsev提到的,GUI将冒号解释为执行名称空间Redis本身不这样做。关于冒号在Redis中的作用,在年有很好的讨论

也就是说,您需要编写代码来完成这项工作。代码的编写方式取决于您计划在什么环境中执行此操作,以及您的速度和一致性要求

如果您只想在本地或在dev上执行此操作,以基本了解您拥有的顶级密钥,您可以通过您选择的后端语言Redis客户机调用
keys*
,然后遍历返回的内容以查找所有顶级名称空间。Python中的一个示例使用:

导入redis
r=redis.redis(host='localhost',port=6379,db=0)
top_level_namespace=set([item.split(':')[0],用于r.keys('*')中的项)
如果您想在生产中这样做,您必须记住,
KEYS*
非常非常慢,并且会阻塞redis db直到完成。如果您对此没有意见,您可以使用与上面Python示例相同的逻辑编写一个quick,以便在Redis服务器上运行该逻辑,并且您不需要浪费网络时间将所有密钥传输回应用服务器

如果
KEYS(*)
对于您的用例来说太慢,并且一致性不是非常重要,那么您可以使用它并迭代结果


如果
KEYS(*)
太慢且一致性非常重要,那么您最好在应用程序中维护一组辅助顶级名称空间作为应用程序逻辑,只需
SMEMBERS
在需要时检索它们。编写和维护应用程序逻辑会很烦人,但这将是最快、最持久的方法。

首先,正如Sergio Tulentsev所提到的,GUI将冒号解释为执行名称空间Redis本身不这样做。关于冒号在Redis中的作用,在年有很好的讨论

也就是说,您需要编写代码来完成这项工作。代码的编写方式取决于您计划在什么环境中执行此操作,以及您的速度和一致性要求

如果您只想在本地或在dev上执行此操作,以基本了解您拥有的顶级密钥,您可以通过您选择的后端语言Redis客户机调用
keys*
,然后遍历返回的内容以查找所有顶级名称空间。Python中的一个示例使用:

导入redis
r=redis.redis(host='localhost',port=6379,db=0)
top_level_namespace=set([item.split(':')[0],用于r.keys('*')中的项)
如果您想在生产中这样做,您必须记住,
KEYS*
非常非常慢,并且会阻塞redis db直到完成。如果您对此没有意见,您可以使用与上面Python示例相同的逻辑编写一个quick,以便在Redis服务器上运行该逻辑,并且您不需要浪费网络时间将所有密钥传输回应用服务器

如果
KEYS(*)
对于您的用例来说太慢,并且一致性不是非常重要,那么您可以使用它并迭代结果


如果
KEYS(*)
太慢且一致性非常重要,那么您最好在应用程序中维护一组辅助顶级名称空间作为应用程序逻辑,只需
SMEMBERS
在需要时检索它们。编写和维护应用程序逻辑会很烦人,但这将是最快和最持久的方法。

[EB,HY,…]是一组数据吗?键*仅返回第一级数据。问题:您使用何处显示此树
keys*
返回所有键:
EB:0V:…,EB:400V:…,HY:0V:…,HY:400V:…
,我只想要
EB,MB,HY,
,不循环所有键并手动筛选。我正在使用Redis桌面管理器是的,你需要写一些代码。[EB,HY,…]是一组数据吗?键*仅返回第一级数据。问题:您使用何处显示此树
keys*
返回所有键:
EB:0V:…,EB:400V:…,HY:0V:…,HY:400V:…
,我只想要
EB,MB,HY,
,不循环所有键并手动筛选。我正在使用Redis桌面管理器是的,你需要写一些代码。