【问题标题】:In Django, how can we get all cache keys stored in database (MySQL)在 Django 中,我们如何获取存储在数据库中的所有缓存键(MySQL)
【发布时间】:2018-03-09 07:28:06
【问题描述】:
我在 Django 中使用per-view cache,我想在缓存过时时刷新缓存。在文档中,我没有看到有关刷新陈旧缓存的信息,在经历了几个线程后,我决定使用 django-signals 向函数发送信号,该函数将从数据库中删除缓存记录。所以我的问题是我们如何检索密钥并删除它?
我看到默认实现提供了一种为缓存提供过期时间的方法(如在@cache_page(60 * 15) 中,并且每当我们在过期时间后调用视图时它都会刷新。有没有办法刷新陈旧的缓存而不是基于在预定时间?
【问题讨论】:
标签:
python
django
caching
【解决方案1】:
我在这里找到了一些解决方案 (Expire a view-cache in Django?)。它主要与memcached数据有关,但我的是数据库缓存数据。
我想出了 Django 信号来调用一个函数来清除与我的视图相关的所有缓存。由于在数据库缓存数据中检索键不是一件简单的事情,我只是通过原始 SQL 来删除视图缓存。下面是代码sn-p。
注意:由于我只有一个缓存视图,我只是将其删除,但如果缓存表中有多个每个视图缓存,则在删除缓存数据时需要小心
cache_table 是在 settings.py 中为缓存表定义的名称
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'cache_table',
}}
@receiver(post_save, sender=SampleModel)
def remove_cache(instance, **kwargs):
with connection.cursor() as cursor:
cursor.execute("DELETE FROM cache_table where cache_key like ('%views.decorators.cache%')")
print('Deleted view cache')