[大家下午好,我想通过遮罩或模板从Redis获取所有对象。我知道我可以使用KEYS,但是它非常慢,因为它适用于O(n),其中n是数据库中所有键的大小,并且仅返回不包含数据的键。您能给我一个好的解决方案吗?
您可以使用SCAN https://redis.io/commands/scan或HGETALL命令并将对象存储在哈希表中以获取详细信息,建议您查看文档https://redis.io/commands/hgetall。
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