2011-12-14 5 views
10

Narzędzia:Jak sprawdzić zawartość pamięci podręcznej Django za pomocą memcached w Pythonie? Wersja

  • Python 2.6.5
  • Django 1.3.1
  • memcached 1.4.10
  • python-memcached 1,48

Memcached działa obecnie:

$ 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 

Jestem usi ng memcached i pyton memcached z moim Django proj a ja ustawić go jak poniżej w settings.py:

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

mam ustawić pamięci podręcznej w kodzie:

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

I wtedy otworzyć Django shell aby sprawdzić zawartość pamięci podręcznej:

>>> 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') 
>>> 

Gdy używam pamięci podręcznej Django, countries klucz istnieje. Jednak kiedy używam memcache Pythona, nie dostaję niczego dla krajów. Co robię źle powyżej?

Odpowiedz

8

Django dodaje klucze pamięci podręcznej dwukropkiem. Możesz sprawdzić memcached like so, jeśli to nie pomoże.

+0

Dla odniesienia django już nie domyślnie używa prefiksów jego kluczy pamięci podręcznej z dwukropkiem. Możesz jednak nadal to zrobić, używając opisanej tutaj opcji konfiguracji KEY_PREFIX. http://bit.ly/1lzFFPi –

+0

Dlaczego chcesz skrócić adres URL [Django Cache Prefixing] (https://docs.djangoproject.com/en/dev/topics/cache/#cache-key-prefixing)? – tback

+1

Zrobiłem to, ponieważ myślałem, że skończy mi się miejsce na komentarz. (Nie będę tego robić w przyszłości) –

5

Można użyć memcached_stats od: https://github.com/dlrust/python-memcached-stats

Przykład: (użyłem pylibmc do pamięci podręcznej, ale myślę, że powinno to być to samo używasz python-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) 

Nie jest także interfejsem wiersza poleceń do memcaced_stats: python -m memcached_stats

Spójrz na repozytorium github jako README jest bardzo jasne.

+0

W twoim kodzie jest błąd, w którym robisz mc.get() .. co to jest mc ...? Zakładam, że jest z pylibmc. + 1-ty tys. lib memcached-stats jest niesamowity. –

+0

zobacz dokumenty http://sendapatch.se/projects/pylibmc/ ... typowe dla instancji klienta ... mc = pylibmc.Client (["127.0.0.1"], binary = True, behaviors = {"tcp_nodelay": To prawda, "ketama": prawda}) – jpwagner

2

Poniższy skrypt zrzuca całą zawartość memcached serwera. Został przetestowany z Ubuntu 12.04 i memcached localhost, więc twój przebieg może się różnić.

#!/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' 

Co robi, przechodzi przez wszystkie płyty pamięci podręcznej i drukuje 1000 wpisów każdego z nich.

Powiązane problemy