2011-12-14 28 views
10

Công cụ phiên bản:Làm cách nào để kiểm tra nội dung của bộ nhớ đệm Django bằng Python được ghi nhớ?

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

Memcached hiện đang chạy:

$ 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 

Tôi là người dùng ng memcached và trăn memcached với Proj Django của tôi và tôi đã thiết lập nó như ở sau settings.py:

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

tôi đã thiết lập bộ nhớ cache trong các mã:

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

sau đó tôi mở một Django vỏ để kiểm tra nội dung của bộ nhớ cache:

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

Khi tôi sử dụng bộ nhớ cache của Django, countries tồn tại. Tuy nhiên, khi tôi sử dụng memcache của Python, tôi không nhận được bất cứ điều gì cho các quốc gia. Tôi đang làm gì sai ở trên?

Trả lời

8

Tiền tố Django có các phím bộ nhớ cache có dấu hai chấm. Bạn có thể kiểm tra memcached like so nếu điều này không giúp đỡ.

+0

Để tham khảo, django không còn tiền tố khóa tiền tố của nó bằng dấu hai chấm theo mặc định. Tuy nhiên, bạn vẫn có thể thực hiện điều này bằng cách sử dụng tùy chọn cấu hình KEY_PREFIX được mô tả ở đây. http://bit.ly/1lzFFPi –

+0

Tại sao bạn rút ngắn tiền tố [Django Cache Key Prefixing] (https://docs.djangoproject.com/en/dev/topics/cache/#cache-key-prefixing)? – tback

+1

Tôi đã làm điều đó bởi vì tôi đã nghĩ rằng tôi sẽ chạy ra khỏi không gian bình luận. (Tôi sẽ không làm điều đó trong tương lai) –

5

Bạn có thể sử dụng memcached_stats từ: https://github.com/dlrust/python-memcached-stats

Ví dụ: (tôi đã sử dụng pylibmc cho bộ nhớ cache, nhưng tôi nghĩ rằng điều này nên được như vậy là bạn sử dụng 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) 

Có cũng là giao diện dòng lệnh tới memcaced_stats: python -m memcached_stats

Hãy xem xét repo github như README rất rõ ràng.

+0

có một lỗi trong mã của bạn, nơi bạn làm mc.get() .. mc là gì ...? Tôi giả định nó từ pylibmc. + Tho 1 lib memcached-stats là tuyệt vời. –

+0

xem tài liệu http://sendapatch.se/projects/pylibmc/ ... điển hình cho việc khởi tạo ứng dụng khách ... mc = pylibmc.Client (["127.0.0.1"], nhị phân = True, behaviors = {"tcp_nodelay": Đúng, "ketama": True}) – jpwagner

2

Tập lệnh sau sẽ đổ tất cả nội dung của máy chủ ghi nhớ. Nó được thử nghiệm với Ubuntu 12.04 và một localhost memcached, do đó, milage của bạn có thể khác nhau.

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

Nó hoạt động như thế nào, nó trải qua tất cả các bảng bộ nhớ cache và in 1000 mục nhập của mỗi tấm.

Các vấn đề liên quan