2012-11-02 12 views
15

मैंने redis.io पर mass-insert प्रदान किया है, लेकिन यह वास्तव में मुझे उलझन में डाल दिया। रेडिस द्रव्यमान सम्मिलन का उपयोग कैसे करें?

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 

तो मैं यह मिल गया: डालने के लिए | मैं तो "redis-CLI --पाइप बिल्ली data.txt" का उपयोग एक फाइल करने की कोशिश की मैंने

*3<cr><lf> 
    $3<cr><lf> 
    SET<cr><lf> 
    $3<cr><lf> 
    key<cr><lf> 
    $5<cr><lf> 
    value<cr><lf> 
ERR प्रोटोकॉल त्रुटि: अमान्य बहु थोक लंबाई

यह वास्तव में मुझे उलझन में बनाना 0

तो मैं यह मिल गया। क्या कोई मुझे एक साधारण उदाहरण दे सकता है? आपका बहुत बहुत धन्यवाद।

उत्तर

7

संदेश यह है:

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 

आपकी समस्या शायद करोड़ + वामो विभाजक से आता है। आप इस बिंदु की जांच करने के hexdump -सी आदेश का उपयोग कर सकते हैं:

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 

इसके अलावा, आप जांच करने के लिए अपने लक्ष्य हाल ही में एक Redis उदाहरण और नहीं एक पूर्व 1-2 संस्करण है (जो का समर्थन नहीं करता "चाहते हो सकता है ")।

नोट: उपरोक्त रेखाएं zsh के साथ ठीक काम करती हैं। आप पार्टी का उपयोग करते हैं, तो आप बोली से पहले एक $ जोड़ने के लिए के हवाले से एएनएसआई-सी को गति प्रदान करने की जरूरत है:

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 संस्करण का उपयोग करता हूं। यह प्रोटोकॉल का समर्थन करता है।और मुझे यह मिला: $ echo -n '* 3 \ r \ n $ 3 \ r \ nset \ r \ n $ 3 \ r \ nkey \ n \ r $ 5 \ r \ nvalue \ r \ n' | ./src/redis-cli --pipe सभी डेटा स्थानांतरित कर दिया गया। अंतिम उत्तर की प्रतीक्षा कर रहा है ... ईआरआर प्रोटोकॉल त्रुटि: अवैध मल्टीबल्क लंबाई – wyp

+0

हेक्सडम्प-सी के लिए, मुझे "| * 3 \ r \ n $ 3 \ r \ nset \ |", नहीं | * 3 .. $ 3 .. सेट .. $ 3. |। आपके उत्तर के लिए धन्यवाद। – wyp

+0

तो इसका मतलब है कि \ r \ n आपके खोल द्वारा सही ढंग से व्याख्या नहीं किया गया है - क्या आप बैश या अन्य खोल का उपयोग करते हैं? मैं इस आउटपुट को पाने के लिए zsh का उपयोग करता हूं। –

3

आप इस तरह यह कर सकते हैं:

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

मुझे आशा है कि आप मदद करता है!

4

मैं SET Key0 Value0 फ़ॉर्म के साथ काम करने में सक्षम था।

कृपया https://stackoverflow.com/a/30511742/2613942

पर एक नज़र जबाब LPUSH आदेश के बारे में है। यह SET के साथ भी ठीक काम करता है।

संक्षेप में, मानकों

SET "mykey" "myval" 

बदलें unix2dos साथ खिड़कियों को यूनिक्स से फ़ाइल के स्वरूप डबल बोली: का उपयोग कर

unix2dos myfile.txt 

फिर आयात

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

यह मेरे लिए काम किया।

संबंधित मुद्दे