我在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或其他語言。 –