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

时间:2018-08-21 12:27:40

标签: python django django-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周时,我才必须执行此操作。

这怎么办?谢谢。

2 个答案:

答案 0 :(得分:2)

我认为您以错误的级别解决了该问题:CACHES设置具有自动到期的设置:'TIMEOUT'键:

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

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

  

TIMEOUT:用于缓存的默认超时(以秒为单位)。这个   参数默认为300秒(5分钟)。您可以将TIMEOUT设置为   None,因此默认情况下,缓存键永不过期。值0导致   键立即失效(实际上是“不缓存”)。

一天需要 60×60×24 秒,而 7 天,所以一周有{{1} }秒。

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

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

此外,您可以像@marin says一样临时为特定密钥指定604800的到期时间;如documentation中所指定:

  

基本界面为set(..)set(key, value, timeout)

     

(..)

     

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

答案 1 :(得分:2)

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