redis 키와 값을 처리하기 위해 아래 bash 스크립트를 작성했습니다. 내 Redis에 약 45 ~ 50 백만 건의 열쇠가 있습니다. 모든 값을 검색하고 일부 처리를 수행하려고합니다. 그렇게하기 위해 아래 스크립트는 1 백만 건의 키를 처리하는 데 1 시간이 걸립니다. 5 천만 건의 열쇠를 처리하려면 50 시간이 걸릴 것이고, 그 일을하고 싶지는 않습니다. 누군가가 제안을 해줄 수 있다면 나는 그 스크립트를 최적화하도록 누군가를 기쁘게 도와 줄 수있다.50 만 개의 키를 처리하기 위해 redis cli 스크립트를 최적화하는 방법
내 레디 스 키와 값의 패턴 :
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.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 등을 사용하여 모든 명령에 대해 새로운 프로세스와 연결을 생성하므로 다른 언어로이 작업을 수행하십시오. –