【发布时间】:2012-01-04 09:07:44
【问题描述】:
我对 memcached 有疑问。我使用带有模板'question_%d_%d'的字符串键存储值。我有足够的内存:
STAT bytes 13307757
STAT limit_maxbytes 134217728
但这是我的应用程序的日志:
2012-01-03 16:40:42,896 Get question for key question_4_1045: cache miss
2012-01-03 18:03:10,270 Get question for key question_4_1045: cache miss
2012-01-03 22:26:16,454 Get question for key question_4_1045: cache miss
2012-01-04 02:01:54,639 Get question for key question_4_1045: cache miss
2012-01-04 02:45:03,647 Get question for key question_4_1045: cache miss
2012-01-04 02:46:55,880 Get question for key question_4_1045: cache hit
2012-01-04 02:51:55,606 Get question for key question_4_1045: cache miss
因此我们可以看到,使用相同键的两次连续调用会导致两次缓存未命中,并且仅从缓存中获取一次值。
为什么 memcached 会从缓存中删除我的数据,即使有足够的空间?有办法解决吗?
我试图检查我的 memcached 日志文件(根据配置文件,它是 /var/log/memcached.log),但它是空的。 谢谢!
更新: Django 缓存设置:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
'TIMEOUT': 259200,
}
}
CACHE_BACKEND = 'memcached://127.0.0.1:11211/'
吸气剂:
from django.core.cache import cache
def get_question(level, random_num):
key = 'question_' + unicode(level) + '_' + unicode(random_num)
question = cache.get(key)
if question is None:
question = Question.objects.filter(level=level).order_by('id')[random_num]
cache.set(key, question)
log_message('Get question for key %s: cache miss' % key)
else:
log_message('Get question for key %s: cache hit' % key)
return question
【问题讨论】:
-
如果没有看到缓存集和获取的代码,谁能提供帮助?
-
@Daniel Roseman,我已经更新了帖子