2014-07-21 10 views
14

https://github.com/andymccurdy/redis-pyपायथन में रेडिस, आप कनेक्शन को कैसे बंद करते हैं?

मुझे रूबी में पता है हम छोड़ने() विधि का उपयोग करते हैं। मैं यहाँ अजगर के लिए कुछ भी नहीं मिल सकता है

अजगर:

import redis 
r = redis.StrictRedis(host='localhost', port=6379, db=0) 
r.set('foo', 'bar') 
print r.get('foo') 
#r.close() doesn't work 

माणिक

require "redis" 
redis = Redis.new 
redis.set("mykey", "hello world") 
puts redis.get("mykey") 
redis.quit() 
+0

[स्रोत कोड] पर देख रहे हैं (https://github.com/andymccurdy/redis-py/blob/master/redis/client.py), 'StrictRedis' 'बंद' या 'छोड़ने' को लागू नहीं करता है तरीकों। – jonrsharpe

+0

क्या यह ठीक है कि हम कनेक्शन बंद नहीं करते हैं, मुझे नहीं लगता कि मैं रेडिस से कनेक्शन समझता हूं ... – nevermind

+0

@nevermind मैं 'r.client_kill' देखता हूं, लेकिन यह पता लगाने के लिए कि कौन सा ग्राहक मारना है, आपको करना होगा उन्हें 'r.client_list()' द्वारा सूचीबद्ध करें। 'Netstat की जांच कर रहा है grep 6379' मैंने देखा, कनेक्शन "बंद" राज्य में मिला। 'R.execute_command (" QUIT ") भी है। लेकिन मुझे अभी भी यकीन नहीं है, अगर ऐसा होता है, तो आप क्या पूछते हैं। –

उत्तर

11

बस redis.Redis का उपयोग करें। यह हुड के नीचे एक कनेक्शन पूल का उपयोग करता है, इसलिए आपको उस स्तर पर प्रबंधन के बारे में चिंता करने की ज़रूरत नहीं है।

यदि आपको बिल्कुल निम्न स्तर कनेक्शन का उपयोग करना है, तो आपको आमतौर पर redis.Redis द्वारा प्रतिक्रिया प्रबंधन को करने की आवश्यकता है।

यहाँ एक ही कमांड को क्रियान्वित निम्न स्तर कनेक्शन का उपयोग का एक उदाहरण है:

def execute_low_level(command, *args, **kwargs): 
    connection = redis.Connection(**kwargs) 
    try: 
     connection.connect() 
     connection.send_command(command, *args) 

     response = connection.read_response() 
     if command in redis.Redis.RESPONSE_CALLBACKS: 
      return redis.Redis.RESPONSE_CALLBACKS[command](response) 
     return response 

    finally: 
     del connection 

उदाहरण उपयोग:

response = execute_low_level(
     'HGET', 'redis:key', 'hash:key', host='localhost', port=6379) 

लेकिन जैसा कि मैंने पहले कहा, redis.Redis 99.9% में जाने का रास्ता है मामलों में से

11

StrictRedis कनेक्शन अर्थ विज्ञान ही लागू नहीं होता है, बजाय इसे एक कनेक्शन पूल है, जो रूप में उपलब्ध है का उपयोग करता है एक StrictRedis उदाहरण की एक संपत्ति: S.connection_pool। कनेक्शन_पूल ऑब्जेक्ट में disconnect विधि है, यदि आवश्यक हो तो पूल में सभी कनेक्शनों के तत्काल डिस्कनेक्ट को मजबूर करने के लिए, हालांकि जब आपकी स्ट्रिक्ट्रेडिस ऑब्जेक्ट गुंजाइश से बाहर हो जाती है, पूल में अलग-अलग कनेक्शन आपके हस्तक्षेप के बिना स्वयं को साफ करते हैं (रेडिस/कनेक्शन देखें। पीई: 3 9 2-396)

+0

अगर मैं सख्त के साथ जाने का फैसला करता हूं, तो क्या मुझे कनेक्शन के बारे में चिंता करने की ज़रूरत है? – nevermind

1

आप जब आप स्रोत कोड ConnectionPool.look का उपयोग इसके बारे में चिंता की आवश्यकता नहीं है:

def execute_command(self, *args, **options): 
    "Execute a command and return a parsed response" 
    pool = self.connection_pool 
    command_name = args[0] 
    connection = pool.get_connection(command_name, **options) 
    try: 
     connection.send_command(*args) 
     return self.parse_response(connection, command_name, **options) 
    except (ConnectionError, TimeoutError) as e: 
     connection.disconnect() 
     if not connection.retry_on_timeout and isinstance(e, TimeoutError): 
      raise 
     connection.send_command(*args) 
     return self.parse_response(connection, command_name, **options) 
    finally: 
     pool.release(connection) 

अंत में, हर कनेक्शन कोई फर्क नहीं पड़ता कि आप क्या करते पूल करने के लिए जारी करेंगे, और यह अन्य ग्राहक के लिए आवंटित करेगा ।

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