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