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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/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键,它是“对象类型:id” 如何获取所有关键名称空间(之前的符号:) 例如 我想要一个像这样的命令 127.0.0.1:6379> SCAN 0 MATCH "(^\w+):" COUNT 10 1) "6" 2) "foo" 3) "bar" 4) "baz" 但扫描命令的选项似乎不支持PCRE模式语法 在现实中,我得到了 127.0.0.1:6379> SCAN 0 MATCH "(^\w+):" COUNT 10 1) "6" 2) (empty

我们可能知道,对于Redis键,它是
“对象类型:id”

如何获取所有关键名称空间(
之前的符号:

例如

我想要一个像这样的命令

127.0.0.1:6379> SCAN 0 MATCH "(^\w+):" COUNT 10
1) "6"
2) "foo"
3) "bar"
4) "baz"
但扫描命令的选项似乎不支持PCRE模式语法

在现实中,我得到了

127.0.0.1:6379> SCAN 0 MATCH "(^\w+):" COUNT 10
1) "6"
2) (empty list or set)

有什么想法吗?

您可以创建一个索引键,并在每次添加新键时向其添加每个命名空间:
SADD“namespaces”“foo”
。但是删除它们会有问题,因为您必须检查删除的对象是否是它的最后一个类型

第二个选项是创建一个(如果您使用的是Redis>=4.0)命令,您可以使用该命令添加和删除所述键,该命令将具有自己的类型,在其中存储对象类型计数器(因此它不必调用相当慢的
键*
)。这里的问题是如果您配置了密钥过期或oom密钥删除。一旦Redis本身删除了密钥,计数器就会不正确

第三个选项是使用一个调用
KEYS*
的命令创建一个模块,然后获取该键的第一部分并将其添加到哈希映射/字典(使用
RedisModuleDict
),然后在循环中使用
RedisModule\u replywhithstring(ctx,str)
返回它

我认为你也可以用Lua来编写它,而不是创建一个模块,但是用C编写的模块可能会更快。。。我不认识Lua,所以我不能帮你


你可以在bash中编写一个简单的脚本,从每个键中获取对象类型,然后将其添加到一个临时键中,然后读取、打印和删除,但这与第三个选项相同,但速度较慢,并且必须使用一个临时键,该临时键可能会被其他脚本或其他东西使用。

扫描。。。MATCH
即使使用了正确的模式样式,也无法满足您的需求,因为它只是对一组结果进行后期筛选,不会以任何方式操纵或分组名称。不过,这个问题似乎是个好问题。
127.0.0.1:6379> SCAN 0 MATCH "(^\w+):" COUNT 10
1) "6"
2) (empty list or set)