我不确定 Django 数据库缓存如何处理过期的条目,但它们似乎保留在数据库中。
我希望 Django 在它们过期后删除它们,因为它们的大小很大并且可以有无限数量的不同键。
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'cache_table',
'TIMEOUT': 60 * 20,
}
}
我在过滤后的对象列表上使用缓存,这个过滤器包含数字和字符字段。
这可能吗?
请您参考如下方法:
无法清除过期的条目。这是您可能不想在生产中使用数据库缓存的众多原因之一!
如果可能,您应该切换到不同的缓存后端(我更喜欢 Redis)。如果不能,您还有其他一些选择:
如果您知道要清除的缓存键,可以使用 the low-level cache API直接删除要清除的 key 。
你可以调整
MAX_ENTRIES和/或CULL_FREQUENCYcache arguments限制缓存的整体大小。您可以直接访问数据库(可能来自后台任务或 cron 作业),手动运行一些 SQL,如
DELETE FROM cache_table WHERE expires < now()(我还没有对此进行测试,但我认为它应该可以工作)。
