2013-07-09 6 views
50

मैं redis का उपयोग django कैश के लिए इन-मेमोरी डेटाबेस बैकएंड के रूप में कर रहा हूं।रेडिस-क्ली के माध्यम से सभी चाबियाँ कैसे दिखाएं?

विशेष रूप से, मैं django-redis कॉन्फ़िगर किया गया का उपयोग इस प्रकार है:

CACHES = { 
    'default': { 
     'BACKEND': 'redis_cache.cache.RedisCache', 
     'KEY_PREFIX': DOMAIN_NAME, 
     'LOCATION': 'unix:/tmp/redis_6379.sock:1', 
     'OPTIONS': { 
      'PICKLE_VERSION': -1, # default 
      'PARSER_CLASS': 'redis.connection.HiredisParser', 
      'CLIENT_CLASS': 'redis_cache.client.DefaultClient', 
     }, 
    }, 
} 

मेरे Django कैश सही ढंग से काम करने लगते हैं।

अजीब बात यह है कि मैं redis-cli कमांड लाइन का उपयोग कर django कैश कुंजी नहीं देख सकता।

[संपादित करें] निम्नलिखित है कि मैं

$ redis-cli 

और

$ redis-cli -s /tmp/redis_6379.sock 

[endedit]

कोई अंतर के साथ

के साथ दोनों की कोशिश की में नोटिस करें।

विशेष रूप से, KEYS * आदेश का उपयोग:

$ redis-cli 
redis 127.0.0.1:6379> keys * 
(empty list or set) 

लेकिन

redis 127.0.0.1:6379> set stefano test 
OK 
redis 127.0.0.1:6379> keys * 
1) "stefano" 

जबकि Django खोल से:

In [1]: from django.core.cache import cache 

In [2]: cache.keys('*') 
Out[2]: 
[u'django.contrib.sessions.cachebblhwb3chd6ev2bd85bawuz7g6pgaij8', 
u'django.contrib.sessions.cachewpxiheosc8qv5w4v6k3ml8cslcahiwna'] 

अगर मैं CLI पर MONITOR उपयोग कर रहा हूँ:

redis 127.0.0.1:6379> monitor 
OK 
1373372711.017761 [1 unix:/tmp/redis_6379.sock] "KEYS" "project_prefix:1:*" 

मैं django कैश उपसर्ग का उपयोग करके एक अनुरोध देख सकता हूं; जो साबित करना चाहिए कि रेडिस-क्ली एक ही सेवा से जुड़ा हुआ है। लेकिन फिर भी redis-cli में है कि उपसर्ग के लिए खोज रिटर्न एक (empty list or set)

कि क्यों है?

एक ही रेडिस उदाहरण पर विभिन्न कैशों को विभाजित करने वाली तंत्र क्या है?

+0

रेडिस-क्ली कमांड और उत्तर के जवाब में उपयोग किए गए पैरामीटर पर कुछ टिप्पणियां – Stefano

उत्तर

65

मैं दो संभावनाएं देखते हैं कहेंगे:

1/Django एप्लिकेशन Redis उदाहरण आपको लगता है यह जुड़ा हुआ है, या redis-CLI ग्राहक आप लॉन्च करने पर उसी से कनेक्ट नहीं होता से कनेक्ट नहीं कर सकता है रेडिस उदाहरण।

कृपया ध्यान दें कि आप दोनों मामलों में एक ही सटीक कनेक्शन तंत्र का उपयोग नहीं करते हैं। Django यूनिक्स डोमेन सॉकेट का उपयोग करता है, जबकि रेडिस-क्ली टीसीपी लूपबैक (डिफ़ॉल्ट रूप से) का उपयोग करता है। आप एक ही सॉकेट पथ का उपयोग redis-CLI शुरू करने के लिए चाहते हो सकता है, यह सुनिश्चित करने: अब जब से तुम एक मॉनिटर आदेश है कि आप Django द्वारा भेजे गए आदेश देखें के साथ सत्यापित किया है

$ redis-cli -s /tmp/redis_6379.sock 

, हम आपको से जुड़े हैं मान सकते हैं सही उदाहरण

2/रेडिस में एक डेटाबेस अवधारणा है।डिफ़ॉल्ट रूप से, आपके पास 16 विशिष्ट डेटाबेस हैं, और वर्तमान डिफ़ॉल्ट डेटाबेस 0 है। SELECT कमांड को किसी अन्य डेटाबेस में सत्र स्विच करने के लिए उपयोग किया जा सकता है। प्रति डेटाबेस एक कुंजीपटल है।

INFO KEYSPACE कमांड का उपयोग यह जांचने के लिए किया जा सकता है कि कुछ डेटाबेस कई डेटाबेस में परिभाषित किए गए हैं या नहीं।

redis 127.0.0.1:6379> keys * 
1) "foo" 

और अब DB1 डेटाबेस में:

redis 127.0.0.1:6379> select 1 
OK 
redis 127.0.0.1:6379[1]> keys * 
1) "bar" 

मेरे सुझाव भी होगा

redis 127.0.0.1:6379[1]> info keyspace 
# Keyspace 
db0:keys=1,expires=0 
db1:keys=1,expires=0 

यहाँ मैं दो डेटाबेस है, की कुंजियों db0 डेटाबेस में परिभाषित जाँच करें जांचें कि Django एप्लिकेशन Redis इंस्टेंस (मॉनीटर के साथ) कनेक्शन समय पर कोई SELECT कमांड भेजता है या नहीं।

मैं Django से परिचित नहीं हूं, लेकिन जिस तरह से आपने LOCATION पैरामीटर को परिभाषित किया है, मुझे लगता है कि आपका डेटा डेटाबेस 1 (प्रत्यय के कारण) में हो सकता है।

+1

धन्यवाद डिडिएर। मैंने 1 से इंकार कर दिया था) क्योंकि मैंने सीधे सॉकेट से कनेक्ट करने का प्रयास किया और मुझे कोई फर्क नहीं पड़ता। लेकिन मुझे "चयन" कमांड के बारे में पता नहीं था! यह पूरी तरह से है! अभी काम कर रहा है ... मुझे कहना होगा कि इस बिंदु पर रेडिस दस्तावेज बहुत स्पष्ट नहीं था .. [रेडिस सेलेक्ट] (http://redis.io/commands/select) कमांड डॉक को भी जांचना, भ्रमित टिप्पणियों का एक गुच्छा दिखाता है ! – Stefano

+0

आपके उत्तर में "SELECT" कमांड प्रलेखन का एक लिंक जोड़ा गया है, लेकिन मैं एकाधिक डेटाबेस के किसी भी आधिकारिक संदर्भ को नहीं ढूंढ सकता। शायद यह सिर्फ मुझे है, अगर आपको पता है कि क्या आप लिंक जोड़ सकते हैं? धन्यवाद! – Stefano

+1

मुझे डर है कि डेटाबेस का वर्णन करने वाला कोई समर्पित पृष्ठ नहीं है। कॉन्फ़िगरेशन फ़ाइल में एक उपयोगी टिप्पणी है हालांकि: https://github.com/antirez/redis/blob/unstable/redis.conf#L86 –

2

redis-CLI -h KEYS "trendingKey *"

आउटपुट 1) "trendingKey: 2: 1" 2) "trendingKey: trending102: 1" 3) "trendingKey: trending101: 1"

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