Database 如何通过掩码或模板快速从Redis获取所有对象?

Database 如何通过掩码或模板快速从Redis获取所有对象?,database,redis,server-side,Database,Redis,Server Side,大家下午好,我想通过掩码或模板从Redis获取所有对象。我知道我可以使用键,但速度非常慢,因为它适用于O(n),其中n是数据库中所有键的大小,只返回没有数据的键。您能为我提供一个好的解决方案吗?您可以使用SCAN或HGETALL命令,并将对象存储在哈希表中以了解详细信息,我建议您查看文档。SCAN是替换键*的合适选项,因为时间复杂。但使用此选项无法获取密钥的值。由于您可以通过使用HGETALL为此coz使用哈希结构,因此您可以在一次调用中检索所有键和值。正如@Qwe所说,这两个选项适用于您的案例

大家下午好,我想通过掩码或模板从Redis获取所有对象。我知道我可以使用键,但速度非常慢,因为它适用于O(n),其中n是数据库中所有键的大小,只返回没有数据的键。您能为我提供一个好的解决方案吗?

您可以使用SCAN或HGETALL命令,并将对象存储在哈希表中以了解详细信息,我建议您查看文档。

SCAN
是替换
键*
的合适选项,因为时间复杂。但使用此选项无法获取密钥的值。由于您可以通过使用
HGETALL
为此coz使用哈希结构,因此您可以在一次调用中检索所有键和值。正如@Qwe所说,这两个选项适用于您的案例。然而,我个人使用bash脚本来摆脱这些,因为我不想将我的结构更改为散列。像这样

#Default to '*' key pattern, meaning all redis keys in the namespace
REDIS_KEY_PATTERN="${REDIS_KEY_PATTERN:-*}"
for key in $(redis-cli --scan --pattern "$REDIS_KEY_PATTERN")

do
type=$(redis-cli type $key)
if [ $type = "list" ]
then
    printf "$key => \n$(redis-cli lrange $key 0 -1 | sed 's/^/  /')\n"
elif [ $type = "hash" ]
then
    printf "$key => \n$(redis-cli hgetall $key | sed 's/^/  /')\n"
else
    printf "$key => $(redis-cli get $key)\n"
fi
done

我希望这将是完整的。

您是否检查了RediSearch或RedisGears?