我在下面编写了 bash 脚本来处理 redis 键和值。我的 Redis 中有大约 45-50 百万个键。我想检索所有值并进行一些处理。为此,我的以下脚本需要 1 小时来处理 100 万个密钥。为了处理 5000 万个密钥,我不想这样做需要 50 个小时。我是 redis cli 的新手 - 有人可以帮我优化下面的脚本吗,或者如果有人可以提供一些建议,那就太好了。
我的 Redis 键值模式:
Keys - 123.item.media
Values - 93839,abc,98,829 | 38282,yiw,282,282 | 8922,dux,382,993 |
Keys - 234.item.media
Values - 2122,eww,92,211 | 8332,uei,902,872 | 9039,uns,892,782 |
Keys - 839.item.media
Values - 7822,nkp,77,002 | 7821,mko,999,822 |
在下面的脚本中,我将传递我所有的键并计算每个键的记录量。例如 - 这个键 (123.item.media) 有 3 条记录,而这个键 (839.item.media) 有两条记录。
所以对于 bove 键和值,输出应该是: Total Count: 8
与我对所有 5000 万个密钥所做的方式相同——这花费了太多时间。
我的代码:
#!/bin/sh
cursor=-1
keys=""
recordCount=0
while [ $cursor -ne 0 ];
do
if [ $cursor -eq -1 ]
then
cursor=0
fi
reply=`redis-cli SCAN $cursor MATCH "*" COUNT 100`
#echo $reply
cursor=`expr "$reply" : '\([0-9]*[0-9 ]\)'`
keys=${reply#[0-9]*[[:space:]]}
for i in $keys
do
#echo $i
#echo $keys
value=$(redis-cli GET $i)
temCount=`echo $value | awk -F\| '{print NF}'`
#echo $temCount
recordCount=`expr ${temCount} + ${recordCount}`
done
done
echo "Total Count: " $recordCount
提前感谢您的帮助!