提问人:Utusikov Oleg 提问时间:12/26/2019 更新时间:12/26/2019 访问量:1230
如何通过掩码或模板快速获取 Redis 中的所有对象?
How can I get all objects from Redis by mask or template quicklly?
问:
大家下午好,我想通过掩码或模板从 Redis 获取所有对象。我知道我可以使用 KEYS,但它非常慢,因为它适用于 O(n),其中 n 是数据库中所有键的大小,并且只返回没有数据的键。你能给我一个好的解决方案吗?
答:
1赞
Qwe
12/26/2019
#1
您可以使用 SCAN https://redis.io/commands/scan 或 HGETALL 命令并将对象存储在哈希表中以获取详细信息,我建议您查看文档 https://redis.io/commands/hgetall。
0赞
Praga_t
12/26/2019
#2
SCAN
是替换时间复杂度的 coz 的合适选项。但是,无法使用此选项获取密钥的值。由于您可以使用哈希结构,因为您可以使用在单个调用中检索所有键和值。正如@Qwe所说,这是适用于您的情况的两个选项。但是,我个人使用 bash 脚本来摆脱这些,因为我不想将我的结构更改为哈希。喜欢这个。KEYS *
HGETALL
#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
我希望这将是丰满的。
评论