如何通过蒙版或模板快速从Redis获取所有对象?

问题描述 投票:0回答:2

[大家下午好,我想通过遮罩或模板从Redis获取所有对象。我知道我可以使用KEYS,但是它非常慢,因为它适用于O(n),其中n是数据库中所有键的大小,并且仅返回不包含数据的键。您能给我一个好的解决方案吗?

database redis server-side
2个回答
1
投票

您可以使用SCAN https://redis.io/commands/scan或HGETALL命令并将对象存储在哈希表中以获取详细信息,建议您查看文档https://redis.io/commands/hgetall


0
投票

SCAN是替换时间复杂度KEYS * coz的合适选项。但是您不能使用此选项获得键的值。由于您可以通过使用HGETALL为此哈希使用哈希结构,因此可以在单个调用中检索所有键和值。如@Qwe所说,这是您的情况可用的两个选项。但是我个人使用bash脚本来摆脱这些原因,我不想将结构更改为hash。像这样。

#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
© www.soinside.com 2019 - 2024. All rights reserved.