python 如何让Django数据库缓存中的条目过期?

ut6juiuv  于 2023-05-21  发布在  Python
关注(0)|答案(2)|浏览(202)

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

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'exchange_rate_cache',
    }
}

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

from django.core.cache import cache
cache.delete(key)

但是,我必须只执行此操作,如果该条目已在缓存中存储超过1周。
如何才能做到这一点?谢谢你。

tjrkku2a

tjrkku2a1#

我认为你在错误的层面上解决了问题:CACHES设置一个 * 自动 * 过期的设置:**'TIMEOUT'**键:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'exchange_rate_cache',
        'TIMEOUT': 604800  # 7 days
    }
}

这个设置指定了值“expires”之前的秒数,或者如文档[Django-doc]所述:
TIMEOUT:该高速缓存使用的默认超时(秒)。此参数默认为300秒(5分钟)。您可以将TIMEOUT设置为None,以便在默认情况下,缓存键永远不会过期。值0会导致密钥立即过期(实际上是“不缓存”)。
一天需要 60×60×24 秒,而 * 周 * 是 7 天,所以一周有,604800秒。
通过在设置中添加此功能,如果您稍后改变主意,您可以轻松更改到期时间。
默认情况下,缓存也会保存有限数量的元素(请参阅文档中的其他设置),此外,还有其他事情可以导致该高速缓存删除元素(例如,如果您使用 * 内存缓存 *,则重新启动服务器通常会清除缓存)。
此外,你可以-像@marin说-也 ad-hoc 指定一个特定的密钥到期时,你set(..)它;如文件中所述:
基本接口为set(key, value, timeout)get(key)
(..)
timeout参数是可选的,默认为CACHES设置中相应后端的timeout参数(如上所述)。它是值应该存储该高速缓存中的秒数。为timeout传入None将永远缓存该值。超时时间为0将不会缓存该值。

nmpmafwu

nmpmafwu2#

redis_time_cache = 180 # seconds
cache.set(key, data, redis_time_cache)
  1. key = 'my_key'
  2. data = JSON或String
  3. redis_time_cache =超时

相关问题