2011-12-14 8 views
10

उपकरण संस्करण:मैं पाइथन memcached के साथ एक Django कैश की सामग्री कैसे जांचूं?

  • अजगर 2.6.5
  • Django 1.3.1
  • memcached 1.4.10
  • अजगर-memcached 1,48

Memcached अभी चल रहा है:

$ ps -ef | grep memcache 
nobody 2993  1 0 16:46 ?  00:00:00 /usr/bin/memcached -m 64 -p 11211 -u nobody -l 127.0.0.1 

मैं यूएसआई हूं एनजी memcached और अजगर मेरी Django proj के साथ memcached और मैं इसे की तरह settings.py में निम्नलिखित निर्धारित किया है:

from django.core.cache import cache 
cache.set('countries', ['Canada', 'US']) 

मैं तो एक Django खोलें:

CACHES = { 
    'default': { 
     'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 
     'LOCATION': '127.0.0.1:11211', 
     'TIMEOUT': 86400, 
    }, 
} 

मैं कोड में कैश निर्धारित किया है कैश की सामग्री का निरीक्षण करने के शैल:

>>> from django.core.cache import cache 
>>> 'countries' in cache 
True 
>>> import memcache 
>>> mc = memcache.Client(['127.0.0.1:11211'], debug=1) 
>>> mc.get('countries') 
>>> 

जब मैं Django के कैश का उपयोग करें, countries कुंजी मौजूद है। हालांकि, जब मैं पायथन के memcache का उपयोग करता हूं, मुझे देशों के लिए कुछ भी नहीं मिलता है। मैं ऊपर क्या गलत कर रहा हूँ?

उत्तर

8

Django एक कोलन के साथ कैश कुंजी उपसर्ग करता है। यदि यह मदद नहीं करता है तो आप memcached like so का निरीक्षण कर सकते हैं।

+0

संदर्भ के लिए django अब डिफ़ॉल्ट रूप से कोलन के साथ अपनी कैश कुंजी का उपसर्ग नहीं करता है। हालांकि आप अभी भी वर्णित KEY_PREFIX कॉन्फ़िगरेशन विकल्प का उपयोग कर ऐसा कर सकते हैं। http://bit.ly/1lzFFPi –

+0

आप [Django कैश कुंजी उपसर्ग] को कम क्यों करेंगे (https://docs.djangoproject.com/en/dev/topics/cache/#cache-key-prefixing) यूआरएल? – tback

+1

मैंने ऐसा इसलिए किया क्योंकि मैं सोच रहा था कि मैं टिप्पणी स्थान से बाहर निकलने जा रहा था। (मैं इसे भविष्य में नहीं करूँगा) –

5

आप से memcached_stats उपयोग कर सकते हैं: https://github.com/dlrust/python-memcached-stats

उदाहरण: (मैं कैश के लिए pylibmc इस्तेमाल किया, लेकिन मुझे लगता है कि यह होना चाहिए एक ही आप अजगर-memcached का उपयोग करें)

import pylibmc 

from memcached_stats import MemcachedStats 
mem = MemcachedStats() # connecting to localhost at default memcached port 

# print out all your keys 
mem.keys() 

# say for example key[0] is 'countries', then to get the value just do 
key = mem.keys()[0] 
value = mc.get (key) 

वहाँ memcaced_stats के लिए एक कमांड लाइन इंटरफ़ेस भी है: पायथन -एम memcached_stats

रीडमेम बहुत स्पष्ट है क्योंकि जिथब रेपो को देखें।

+0

आपके कोड में एक बग है जहां आप mc.get() करते हैं .. mc क्या है ...? मैं इसे pylibmc से मानता हूँ। + 1-वें था। memcached-stats lib भयानक है। –

+0

दस्तावेज़ देखें http://sendapatch.se/projects/pylibmc/ ... क्लाइंट इंस्टेंटेशन के लिए सामान्य ... mc = pylibmc.Client (["127.0.0.1"], बाइनरी = सही, व्यवहार = {"tcp_nodelay": सच है, "केटामा": सच}) – jpwagner

2

निम्न स्क्रिप्ट एक memcached सर्वर की सभी सामग्री को डंप करता है। इसका परीक्षण उबंटू 12.04 और स्थानीयहोस्ट मेमकैच के साथ किया जाता है, इसलिए आपका मिलेज भिन्न हो सकता है।

#!/usr/bin/env bash 

echo 'stats items' \ 
| nc localhost 11211 \ 
| grep -oe ':[0-9]*:' \ 
| grep -oe '[0-9]*' \ 
| sort \ 
| uniq \ 
| xargs -L1 -I{} bash -c 'echo "stats cachedump {} 1000" | nc localhost 11211' 

यह क्या करता है, यह सभी कैश स्लैब के माध्यम से जाता है और प्रत्येक की 1000 प्रविष्टियां प्रिंट करता है।

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