복붙노트

[REDIS] 레디 스 - 대량 삽입 및 카운터

REDIS

레디 스 - 대량 삽입 및 카운터

이것은 유래에 여기 내 첫 번째 질문입니다. 친애하는 사회, 감사 당신의 결합 된 지식과 전문 지식을 많이!

레디 스 그렇게 나와 함께 곰하시기 바랍니다에 나는 확실히 간단한 해결책이있어 나는이 새로운 해요.

redis-server --version

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

redis-cli --version

=> 반복-CLI 2.6.14

나는 "레디 스 대량 삽입을 사용하는 방법?"읽고 어떻게 레디 스 대량 삽입을 사용 하는가? 검색 좀하고이 INCR 기능을 레디 스에 대한 칭찬을 많이 읽었습니다. 하지만 난 정말 모든 것을 이해하지 않으며 그것은 나를이 레디 스 - 내부적으로 만 수행하는 데 도움이되지 않습니다.

내 목표: 나는 수입에 레디 스에 텍스트의 'N'라인을 원하는 정확히 순서대로 나중에 검색 할 수 있습니다.

키 1 : 2, 키 3 등 각 회선 I 키와 같은 고유 키를 설정할 키의 한 부분으로 증가 카운터를 사용하여 나중에 그들이 레디 스에 저장된 것과 같은 순서로 줄을 검색 할 수 있어요.

이제 (레디 스 질량 삽입하지 않고) 내가 쉽게이 문제를 해결 같은 레디 스 - CLI 호출을 생성하는 awk 스크립트를 사용하여 :

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

이 같은 "data.txt로"외모 : 이것은 첫 번째 줄입니다. 이 여기에 더 이상 두 번째 줄입니다.

"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로 | -f myscript.awk awk가 | 배쉬는":

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

그래서 모든 것이 잘입니다.

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

어떻게에만 레디 스에서이 같은 일을 할 것인가?

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

등 등

은 "GET 카운터"라인은 그림을위한 것입니다.

어떤 도움에 감사드립니다. 다시 한 번 감사드립니다!

버니

해결법

  1. ==============================

    1.이것에 대한 목록을 사용합니다. 각 라인에 대한 새 키를 사용할 이유가 없습니다. 모든 목록 명령은 여기에 있습니다,하지만 당신이 원하는 하나 RPUSH입니다. 당신은 단지 그렇게 할 것이다, 그래서 당신은 같은 라인에서 한 번에 여러 값을 rpush 수 있습니다 :

    이것에 대한 목록을 사용합니다. 각 라인에 대한 새 키를 사용할 이유가 없습니다. 모든 목록 명령은 여기에 있습니다,하지만 당신이 원하는 하나 RPUSH입니다. 당신은 단지 그렇게 할 것이다, 그래서 당신은 같은 라인에서 한 번에 여러 값을 rpush 수 있습니다 :

    RPUSH some_key line1 line2 ... lineN
    

    그런 다음 검색 할 수 있습니다 :

    LRANGE some_key 0 -1
    

    빠르고 쉬운!

  2. from https://stackoverflow.com/questions/18345242/redis-mass-inserts-and-counters by cc-by-sa and MIT license