Django数据库缓存超时-使后端删除行

时间:2018-11-11 21:52:47

标签: python django caching django-database django-cache

我不确定Django数据库缓存如何处理过期的条目,但似乎它们仍保留在数据库中。

我希望Django在它们到期后删除它们,因为它们的大小很大并且可以有无限数量的不同密钥。

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'cache_table',
        'TIMEOUT': 60 * 20,
    }
}

我在过滤的对象列表上使用cache,并且此过滤器包含数字和字符字段。

有可能吗?

1 个答案:

答案 0 :(得分:1)

无法清除过期的条目。这是您可能不想在生产中使用数据库缓存的众多原因之一!

如果可能,应该切换到其他缓存后端(我更喜欢Redis)。如果不能,那么您还有其他选择:

  1. 如果知道要清除的缓存键,则可以使用the low-level cache API直接删除要清除的键。

  2. 您可以调整MAX_ENTRIES和/或CULL_FREQUENCY cache arguments以限制缓存的整体大小。

  3. 您可以直接进入数据库(可能是从后台任务或cron作业),手动运行诸如DELETE FROM cache_table WHERE expires < now()之类的SQL(我没有测试过,但是我认为它应该可以工作)。