我有一个注册了数据库缓存的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条答案
按热度按时间tjrkku2a1#
我认为你在错误的层面上解决了问题:
CACHES
设置有一个 * 自动 * 过期的设置:**'TIMEOUT'
**键:这个设置指定了值“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将不会缓存该值。nmpmafwu2#