如何使 Django 数据库缓存的条目过期?

Tom*_*net 4 python django django-cache

我有一个带有注册数据库缓存的 Django 应用程序:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'exchange_rate_cache',
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望缓存中的条目在一周后过期并被删除。要从缓存中删除条目,只需执行以下操作:

from django.core.cache import cache
cache.delete(key)
Run Code Online (Sandbox Code Playgroud)

但是,只有当条目在缓存中存储超过 1 周时,我才必须执行此操作。

如何才能做到这一点?谢谢你。

Wil*_*sem 6

我认为您在错误的级别解决了问题:CACHES设置自动过期的设置:'TIMEOUT'关键:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'exchange_rate_cache',
        'TIMEOUT': 604800  # 7 days
    }
}
Run Code Online (Sandbox Code Playgroud)

此设置指定值“过期”之前的秒数,或如文档 [Django-doc] 中所述

TIMEOUT:用于缓存的默认超时(以秒为单位)。此参数默认为 300 秒(5 分钟)。您可以设置TIMEOUTNone默认情况下,缓存键永不过期。值0导致键立即过期(有效地“不缓存”)。

一天需要60×60×24秒,一周7天,所以一周有,604800秒。

通过在设置中添加它,如果您以后改变主意,您可以轻松更改到期时间。

默认情况下,缓存还包含有限数量的元素(请参阅文档中的其他设置),此外还有其他事情可能导致缓存删除元素(例如,如果您使用内存缓存,重新启动服务器通常会清除缓存) .

此外,您可以 - 就像@marin 所说的那样- 还可以临时指定特定密钥的到期时间set(..);如文档中所述:

基本界面是set(key, value, timeout)get(key)

(..)

timeout参数是可选的,默认为设置中timeout 相应后端的参数CACHES (如上所述)。它是值应该存储在缓存中的秒数。传入Nonefortimeout将永远缓存该值。超时为 0 不会缓存该值。

  • 关于 django 是否从数据库本身中剔除记录的任何线索?还是需要手动完成? (2认同)