我正在尝试将值“name2”保存到Django的memcache中并获得...有趣的结果。
我使用的是Django 1.5.4。,pythn 2.7.3。
我目前的设置:
在我的django.settings文件中:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '123.123.123.123:11211',
}
}
import memcache
def heavy_view2():
s = memcache.Client(['123.123.123.123:11211'])
# s.set("name", "david");
return s.get("name1")
所以对于一切标准,当我去我的服务器并设置memcache值“name1”时,我可以从我的机器上拉下来!
现在使用Django:
from django.core.cache import cache
def heavy_view():
cache_key = 'name'
result = cache.get(cache_key)
return result
>>>> print(heavy_view())
>>>> None
这很奇怪!特别是因为我设置了“名称”服务器端! 可是等等!当我这样做时:
from django.core.cache import cache
def heavy_view():
cache_key = 'name1'
cache_time = 100 # time to live in seconds
if not result:# some calculations here
print('set name1')
result = 'tbone'
cache.set(cache_key, result, 100)
return result
>>>> heavy_view()
>>>> 'set name1'
>>>> r = heavy_view()
>>>> 'tbone'
但是当我回到我的服务器并请求“name1”时,我得到了无。
使用heavy_view()的后续调用返回我的“缓存”结果。
但是如果我使用:sudo service memcache restart重新启动服务器内存缓存,则结果是LOST。
尽管如此,在SERVER上查找“name1”始终返回None。
django运行它自己的memcache守护进程吗?我对结果的发展感到非常困惑!
答案 0 :(得分:0)
使用以下内容:How to export all keys and values from memcached with python-memcache?
并意识到Django正在添加“:1:”+键名。
import telnetlib
def get_all_memcached_keys(host='127.0.0.1', port=11211):
t = telnetlib.Telnet(host, port)
t.write('stats items STAT items:0:number 0 END\n')
items = t.read_until('END').split('\r\n')
keys = set()
for item in items:
parts = item.split(':')
if not len(parts) >= 3:
continue
slab = parts[1]
t.write('stats cachedump {} 200000 ITEM views.decorators.cache.cache_header..cc7d9 [6 b; 1256056128 s] END\n'.format(slab))
cachelines = t.read_until('END').split('\r\n')
for line in cachelines:
parts = line.split(' ')
if not len(parts) >= 3:
continue
keys.add(parts[1])
t.close()
return keys