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

Python Django数据库缓存超时-使后端删除行,python,django,caching,django-database,django-cache,Python,Django,Caching,Django Database,Django Cache,我不确定Django数据库缓存对过期条目做了什么,但它们似乎仍保留在数据库中 我希望Django在它们过期后删除它们,因为它们的大小非常大,并且可以有无限数量的不同密钥 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 'LOCATION': 'cache_table', 'TIMEOUT': 60 * 20, } }

我不确定Django数据库缓存对过期条目做了什么,但它们似乎仍保留在数据库中

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

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'cache_table',
        'TIMEOUT': 60 * 20,
    }
}
我对过滤后的对象列表使用
cache
,该过滤器包含数字和字符字段


有可能吗?

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

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

  • 如果知道要清除的缓存密钥,可以使用直接删除要清除的密钥

  • 您可以调整
    MAX\u条目
    和/或
    CULL\u频率
    ,以限制缓存的总体大小

  • 您可以直接插入数据库(可能是从后台任务或cron作业),手动运行一些SQL,如
    DELETE from cache\u table WHERE expires
    (我还没有测试过,但我认为应该可以)


  • 值得注意的是,虽然某些后台进程通常不会删除这些行,
    timeout
    参数确实起作用。它仅在读取缓存时工作。我不确定行是否在过期时被删除,但如果您的客户端尝试
    get()
    过期缓存项,它将获得
    None
    。我刚刚更新了一些信息。