如何获得所有';关键名称空间';(对象类型)在Redis中?
我们可能知道,对于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
“对象类型: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)