我在bash脚本下面写了处理redis键和值的脚本。我的Redis中有大约45-50万个密钥。我想检索所有的值并做一些处理。要做到这一点,我的下面的脚本需要1个小时来处理1百万个密钥。为了处理5千万个密钥,需要50个小时,我不想这样做。我是redis cli的新手 - 有人可以帮助我优化下面的脚本,或者如果有人能提供一些建议,那将会非常棒。如何优化redis cli脚本来处理50百万个密钥
我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)有两个记录。
所以对于波夫键和值,输出应该是: 总数:8
同样的方式,我做的所有50个百万键 - 这是花费过多时间。
我的代码:
#!/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
感谢您的帮助提前!
请考虑以另一种语言进行此操作,因为您正在为每个命令创建新的进程和连接 - 尝试C,C++,Python,Perl,PHP或其他语言。 –