2013-08-20 2 views
2

이것은 내 첫 번째 질문은 stackoverflow에 있습니다. 친애하는 커뮤니티, 다양한 지식과 전문 지식에 감사드립니다.redis - 대량 삽입 및 카운터

저는 Redis에 익숙하지 않으므로 간단한 해결책이 있다고 생각합니다.

redis-server --version 

=> 레디 스 서버 2.6.14 V = SHA = 00,000,000 : 0 = malloc에 ​​libc의 비트 =

redis-cli --version 

64 => 레디 스 I-CLI 읽고 2.6.14

" Redis 대량 삽입을 사용하는 방법? " How to use Redis mass insertion?
내가 봤어 redis INCR 기능에 대한 칭찬을 많이 읽었습니다. 그러나 나는 모든 것을 정말로 이해하지 못하며 내부적으로 만 이러한 재분석을하는 데 도움이되지 않습니다.

내 목표 : 나는 레디 스에 텍스트의 'N'라인을 가져 정확히 순서대로 나중에 PIN이 할 .

각 줄마다 키 : 1, 키 : 2, 키 : 3 등의 고유 한 키를 설정했습니다. 증가하는 카운터를 키의 일부로 사용하여 나중에 동일한 그들이 redis에 저장된 순서.

cat data.txt | awk -f myscript.awk | bash 

는 "data.txt로는"다음과 같습니다 이제


(레디 스 질량 삽입하지 않고) 내가 레디 스-CLI 호출과 같은를 생성하는 awk 스크립트를 사용하여 쉽게 이 문제를 해결 this :
이것은 첫 번째 줄입니다.
여기 두 번째 줄이 훨씬 깁니다.


"myscript.awk"는 다음과 같습니다

#!/usr/bin/awk -f 

### This section is being applied before any line is read: 
BEGIN { 
# Set counter initially to Zero 
print "redis-cli SET counter 0" 
} 

### This section is being applied per line read into awk: 
{ 
# Increase counter by One 
print "redis-cli INCR counter" 
# Read current counter from redis into an variable 
print "MYCOUNTER=`redis-cli GET counter`" 
# Use this variable as counter for the key 
print "redis-cli SET key:$MYCOUNTER \"" $0 "\"" 
# Retrive stored value from redis for illustration 
print "redis-cli GET key:$MYCOUNTER" 
} 

의 출력 "고양이 data.txt로이 | AWK는 myscript.awk -f | 배쉬가":

OK 
(integer) 1 
OK 
"This is the first line." 
(integer) 2 
OK 
"This here is the much longer second line." 

모든 게 정상입니다.


하지만 그 대신 "레디 스-CLI를"호출
두 번 수입 라인 당 나는 레디 스 "대량 삽입"기능을 사용하려고합니다. 여기에 당신의 도움이 필요합니다 :

나는 어떻게 이런 일을 redis에서만 할 수 있습니까?

은 "GET 카운터"라인

단지 설명을위한 등

SET counter 0 
=> OK 
INCR counter 
=> (integer) 1 
GET counter 
=> "1" 
SET KEY:{counter} "Content of line 1" 
=> OK 
INCR counter 
=> (integer) 2 
GET counter 
=> "2" 
SET KEY:{counter} "Different content of line 2" 
=> OK 

등.

도움을 주시면 감사하겠습니다. 다시 한 번 감사드립니다!

베르니

답변

2

목록을 사용하십시오. 각 줄마다 새 키를 사용할 이유가 없습니다. 모든 목록 명령은 here이지만 원하는 것은 RPUSH입니다. 동일한 라인에서 한 번에 여러 값을 rpush 수 있습니다, 그래서 당신은 단지을 다하겠습니다 :

RPUSH some_key line1 line2 ... lineN 

그런 다음 검색 :

LRANGE some_key 0 -1 

빠르고 쉽게!

+0

답장을 보내 주셔서 감사합니다. 부끄러움처럼 작동합니다 :-) 나는 해시로 약간의 팅크를했습니다. 그러나 목록 요소는 무작위 순서로 반환되었습니다. LRANGE는 RPUSH와 함께 저장된 순서대로 요소를 반환합니다. 맵시 있는! @Eli –

+0

죄송합니다. 내 코멘트에 실수가 있습니다. 죄송합니다! 나는 성공하지 못한 채 "SADD"와 "SMEMBERS"를 시도했다. "SMEMBERS"가 반환되면 임의의 순서로 나타납니다. 엘리의 대답으로 인해 내 질문을 마무리하게되어 기쁩니다. @ 엘리 –