Управление именованием ключей кэша для кэшированных представлений - PullRequest
3 голосов
/ 29 января 2012

Я кеширую представления в моем проекте Django.

@cache_page(60 * 15)
def view_to_cache

Поскольку пользователи могут редактировать содержимое, я хотел бы удалить определенные кэши, когда пользователь выполняет редактирование. Для этого я cache.delete(KEY) в конце функции редактирования.

Проблема в том, что я не уверен, как получить значение соответствующего ключа для удаления.

Я запустил memcached_stats, чтобы получить ключи, и все они случайные. Есть идеи, как узнать, какой ключ удалить? Вот пример кеша:

>>> from memcached_stats import MemcachedStats
>>> mem = MemcachedStats()
>>> mem.stats()
{'auth_cmds': '0', 'reclaimed': '0', 'pid': '67140', 'cas_hits': '0', 'uptime': '3075', 'delete_misses': '0', 'listen_disabled_num': '0', 'cas_misses': '0', 'decr_hits': '0', 'incr_hits': '0', 'version': '1.4.5', 'limit_maxbytes': '67108864', 'bytes_written': '13604', 'incr_misses': '0', 'accepting_conns': '1', 'rusage_system': '0.073969', 'total_items': '13', 'cmd_get': '26', 'curr_connections': '12', 'threads': '4', 'total_connections': '33', 'cmd_set': '13', 'curr_items': '9', 'conn_yields': '0', 'get_misses': '7', 'bytes_read': '24226', 'cas_badval': '0', 'cmd_flush': '0', 'evictions': '0', 'bytes': '19492', 'connection_structures': '14', 'auth_errors': '0', 'rusage_user': '0.063413', 'time': '1327784334', 'delete_hits': '1', 'pointer_size': '64', 'decr_misses': '0', 'get_hits': '19'}
>>> mem.keys()
[':1:django.contrib.sessions.cachec7a594602214b4992c53575b3eda010d', ':1:views.decorators.cache.cache_header..511894add8326666c1a436bdb37e50ce.en-us', ':1:views.decorators.cache.cache_header..642ae686efc6dbc27b334fc0e1d22641.en-us', ':1:views.decorators.cache.cache_header..7739f0feb4375839a76f5cae2d10a69c.en-us', ':1:views.decorators.cache.cache_header..e32e41ea17bca494f9794fa87f5ec0d6.en-us', ':1:views.decorators.cache.cache_page..GET.511894add8326666c1a436bdb37e50ce.d41d8cd98f00b204e9800998ecf8427e.en-us', ':1:views.decorators.cache.cache_page..GET.642ae686efc6dbc27b334fc0e1d22641.d41d8cd98f00b204e9800998ecf8427e.en-us', ':1:views.decorators.cache.cache_page..GET.7739f0feb4375839a76f5cae2d10a69c.d41d8cd98f00b204e9800998ecf8427e.en-us', ':1:views.decorators.cache.cache_page..GET.e32e41ea17bca494f9794fa87f5ec0d6.d41d8cd98f00b204e9800998ecf8427e.en-us']
>>> cache.has_key(':1:django.contrib.sessions.cachec7a594602214b4992c53575b3eda010d')
Traceback (most recent call last):
  File "<console>", line 1, in <module>
NameError: name 'cache' is not defined
>>> from django.core.cache import cache
>>> cache.has_key(':1:django.contrib.sessions.cachec7a594602214b4992c53575b3eda010d')
False
>>> cache.has_key('1:django.contrib.sessions.cachec7a594602214b4992c53575b3eda010d')
False
>>> cache.has_key('django.contrib.sessions.cachec7a594602214b4992c53575b3eda010d')
True
>>> cache.has_key('views.decorators.cache.cache_page..GET.e32e41ea17bca494f9794fa87f5ec0d6.d41d8cd98f00b204e9800998ecf8427e.en-us')

1 Ответ

1 голос
/ 29 января 2012

Они не случайные, это md5 хэши URL.Существует get_cache_key в django.utils.cache, который можно использовать или просматривать для воссоздания ключей.Он принимает объект запроса, и я думаю, что он использует request.path и settings.LANGUAGE_CODE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...