2012-11-02 18 views
15

Redis.io'da verilen mass-insert okudum, ama gerçekten kafam karıştı. Redis kütle ekleme nasıl kullanılır?

All data transferred. Waiting for the last reply... 
    ERR wrong number of arguments for 'set' command 
    ERR unknown command '$4' 
    ERR wrong number of arguments for 'echo' command 
    ERR unknown command '$20' 

:

SET Key0 Value0 
    SET Key1 Value1 
    SET Key2 Value3 

Sonra bu var: eklemek | Sonra "Redis-cli --pipe kedi data.txt" kullandığınız bir dosyayı yapmaya çalıştı Ben de

*3<cr><lf> 
    $3<cr><lf> 
    SET<cr><lf> 
    $3<cr><lf> 
    key<cr><lf> 
    $5<cr><lf> 
    value<cr><lf> 
çalıştı ERR Protokol hatası: geçersiz çoklu toplu uzunluğu Gerçekten beni karıştı yapmak

0 Sonra ben hallederim. Herkes bana basit bir örnek verebilir mi? Çok teşekkür ederim.

cevap

7

Burada:

echo -n '*3\r\n$3\r\nset\r\n$3\r\nkey\r\n$5\r\nvalue\r\n' | ./redis-cli --pipe 
All data transferred. Waiting for the last reply... 
Last reply received from server. 
errors: 0, replies: 1 

Senin sorunun muhtemelen cr + lf ayırıcılar geliyor. Eğer hedef "desteklemediği (son Redis örneği değil, bir ön-1-2 sürümüdür kontrol etmek isteyebilir, ayrıca

echo -n '*3\r\n$3\r\nset\r\n$3\r\nkey\r\n$5\r\nvalue\r\n' | hexdump -C 
00000000 2a 33 0d 0a 24 33 0d 0a 73 65 74 0d 0a 24 33 0d |*3..$3..set..$3.| 
00000010 0a 6b 65 79 0a 0d 24 35 0d 0a 76 61 6c 75 65 0d |.key..$5..value.| 
00000020 0a            |.| 
00000021 

: Bu noktayı kontrol etmek HexDump -C komutunu kullanabilirsiniz unified protocol ").

Not: yukarıdaki satırlar zsh ile iyi çalışır. Eğer bash kullanıyorsanız, alıntı ANSI-C tetiklemek için teklif önce $ eklemek gerekir:

echo -n $'*3\r\n$3\r\nset\r\n$3\r\nkey\r\n$5\r\nvalue\r\n' | hexdump -C 
+0

2.4.14 sürümünü kullanıyorum. Protokolü destekliyor.Ve şunu elde ettim: $ echo -n '* 3 \ r \ n $ 3 \ r \ nset \ r \ n $ 3 \ r \ nkey \ n \ r $ 5 \ r \ nvalue \ r \ n' | ./src/redis-cli --pipe Tüm veriler aktarıldı. Son yanıtı bekliyorum ... ERR Protokol hatası: geçersiz çoklu dirsek uzunluğu – wyp

+0

hexdump -C için "| * 3 \ r \ n $ 3 \ r \ nset \ |" değil, | * 3 .. $ 3 .. set .. $ 3. |. Cevabınız için teşekkür ederim. – wyp

+0

Yani \ r \ n kabuğunuz tarafından doğru şekilde yorumlanmadığı anlamına geliyor - bash veya başka bir kabuk kullanıyor musunuz? Bu çıkışı almak için zsh kullanıyorum. –

3

Böyle yapabilirsiniz: Umarım

echo -e "$(cat data.txt)" | redis-cli --pipe 

o size yardımcı olur

!

4

SET Key0 Value0 formu ile çalışabiliyordum.

cevap LPUSH komutu hakkındadır https://stackoverflow.com/a/30511742/2613942

de bakabilirsiniz edin. Ayrıca SET ile iyi çalışıyor.

parametreleri

SET "mykey" "myval" 

Değişim unix2dos ile pencerelerine unix dosyanın formatı çift alıntı Özetlemek gerekirse: kullanarak

unix2dos myfile.txt 

Ardından içe

cat myfile.txt | src/redis-cli --pipe

Bu benim için çalıştı.

İlgili konular