Skip to main content
 首页 » 编程设计

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

2024年12月31日23kevingrace

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

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

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

我在过滤后的对象列表上使用缓存,这个过滤器包含数字和字符字段。

这可能吗?

请您参考如下方法:

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

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

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

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

  3. 您可以直接访问数据库(可能来自后台任务或 cron 作业),手动运行一些 SQL,如 DELETE FROM cache_table WHERE expires < now() (我还没有对此进行测试,但我认为它应该可以工作)。