redis

2013-05-15 10 views
24

मैं एक हैश = "के रूप में मैच/123/परिणाम"redis

मैं "HSET" का उपयोग कर स्थापित करने के लिए प्रविष्टियों को जोड़ने कर रहा हूँ और का उपयोग कर एक समय में सभी प्रविष्टियों को पुन: प्राप्त redis नाम में सेट कर रहा हूँ में एक ही बार में पूरा HashSet निकालें "HGETALL"

अब, मैं इस हैश सेट फ्लश करने के लिए चाहते हैं, लेकिन कोई आदेश इस मामले मैं आग में "HDELALL"

तो

मैं उपयोग कर रहा हूँ "डेल" हैश नाम ही सेट को दूर करने की तरह है, इस तरह की कमांड -

DEL match/123/result

एक ही समय में सबकुछ हटाने के लिए केवल यह दृष्टिकोण मिल सकता है। क्या कोई अन्य समाधान है?

+3

नहीं है, ("कार्रवाई में Redis" पुस्तक से) अजगर में काम करना चाहिए और यह आप क्या करने की उम्मीद कर रहे हैं क्या है। रेडिस में खाली मूल्य मौजूद नहीं है। रेडिस के लिए एक खाली हैश या कोई हैश बिल्कुल समान नहीं है। –

+0

@ डिडिएर स्पीज़िया: बहुत बहुत धन्यवाद। – Pranav

+0

@Pranav क्या मेरा उत्तर मदद करता है? यदि हां, तो कृपया इसे स्वीकार करें अन्यथा पूछें कि क्या कुछ अस्पष्ट है –

उत्तर

2

यहाँ एक ही, pipelined अनुरोध के माध्यम से एक हैश में सभी चाबियाँ दूर करने के लिए एक लाल आधारित तरीका है:

def hdelall(key) 
    r = Redis.new 
    keys = r.hgetall(key).keys 
    r.pipelined do 
    keys.each do |k| 
     r.hdel key, k 
    end 
    end 
end 
2

आप कुंजी की एक सूची है तो आप शायद hdel with multiple keys उपयोग कर सकते हैं लेकिन मैं निश्चित रूप से होगा का उपयोग न करें का उपयोग न करें क्योंकि इसमें ओ (एन) की जटिलता है।

डिफ़ॉल्ट redis तक एक hashet अंदर स्पष्ट समारोह की अनुमति नहीं है तो तुम डेल

43

उपयोग करने के लिए आप हटाना या 'myhash' हैश फ्लश करने के लिए चाहते हैं होगा।

नीचे आदेश का उपयोग करें:

redis-cli 

redis> del myhash 

आशा है कि यह समस्या का समाधान होगा।

+2

यह मेरे लिए काम किया। धन्यवाद –

+1

बढ़िया, अगर यह आपकी मदद करता है तो कृपया उत्तर को स्वीकार के रूप में चिह्नित करें। –

+0

क्षमा करें मैं सवाल पूछता हूं। इसलिए मैं इसे उत्तर के रूप में स्वीकार नहीं कर सकता :) –

0

यह

all_keys = list(conn.hgetall('some_hash_name').keys()) 
conn.hdel('some_hash_name', *all_keys)