繁体   English   中英

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

[英]How can I expire entries to Django database cache?

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

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

我希望缓存中的条目过期,并在一周后将其删除。 要从缓存中删除条目,需要做的是:

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

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

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

我认为您以错误的级别解决了该问题: 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所说的那样,您还可以在set(..)临时指定特定密钥的到期时间。 文档中所指定:

基本接口是set(key, value, timeout)get(key)

(..)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM