Javascript 在redis中是否仍然可以检索以特定字符串开头的所有键?

Javascript 在redis中是否仍然可以检索以特定字符串开头的所有键?,javascript,redis,Javascript,Redis,在redis中是否仍然可以检索以特定字符串开头的所有键 我想做一些像存储: 'thing1:userid1' : ' '; 'thing1:userid2' : ' '; 'thing2:userid1' : ' '; 'thing2:userid2' : ' '; 并检索每个内容1,而无需了解每个用户 REDIS.keys("thing1:*") 但是,您可能需要考虑使用MAP。 REDIS.hset("thing1", "user1", "") REDIS.hset("thing1",

在redis中是否仍然可以检索以特定字符串开头的所有键

我想做一些像存储:

'thing1:userid1' : ' ';
'thing1:userid2' : ' ';
'thing2:userid1' : ' ';
'thing2:userid2' : ' ';
并检索每个
内容1
,而无需了解每个用户

REDIS.keys("thing1:*")

但是,您可能需要考虑使用MAP。

REDIS.hset("thing1", "user1", "")
REDIS.hset("thing1", "user2", "")
REDIDS.hgetall("thing1")

在生产过程中一定要小心。Redis一次只能处理一个命令,而且按键速度非常慢。它必须查看整个数据库中的每个键。

查看一下

redis中有一个命令,用于搜索所有键名以查找指定的模式。但是,在使用此命令时应该小心,因为它的时间复杂度为O(N),因此性能取决于数据库中的密钥数量。它主要用于调试,不适用于生产环境。

您还可以跟踪列表中的ID,然后使用SORT检索所有键(或散列)的值

它比“键”复杂一点,但也可以做得更多(:

我在某个地方读到,如果散列中有太多字段,hgetall可能会给您带来问题,不幸的是,我找不到参考atm。

您可以使用命令对与给定模式匹配的所有键进行迭代:

> SCAN 0 MATCH thing1:*
1) "172032"
2) 1) "thing1:userid1"
   2) "thing1:userid2"
> SCAN 172032 MATCH thing1:*
1) "0"
2) 1) "thing1:userid3"

嘿,是的,我现在正在使用一张地图,但我认为它在较低级别上会很有用,因为我只是偶尔才看一次。只是需要确保我在需要的时候仍然可以拿到所有的钥匙。谢谢!