python - 如何使 Django 数据库缓存的条目过期?
问题描述
我有一个带有注册数据库缓存的 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
}
}
此设置指定值“过期”之前的秒数,或如文档 [Django-doc]中所述:
TIMEOUT
:用于缓存的默认超时,以秒为单位。此参数默认为 300 秒(5 分钟)。您可以设置TIMEOUT
为None
,默认情况下,缓存键永不过期。值0
会导致键立即过期(实际上是“不缓存”)。
一天需要60×60×24秒,一周是7天,所以一周有,604800
秒。
通过在设置中添加此项,如果您以后改变主意,您可以轻松更改到期时间。
默认情况下,缓存还包含有限数量的元素(请参阅文档中的其他设置),此外还有其他事情可能导致缓存删除元素(例如,如果您使用内存缓存重新启动服务器通常会清除缓存) .
此外,您可以 - 就像@marin 所说的那样- 还可以在您使用特定密钥时临时指定一个到期时间set(..)
;如文档中所述:
基本界面是
set(key, value, timeout)
和get(key)
(..)
该
timeout
参数是可选的,默认为设置timeout
中适当后端的参数CACHES
(如上所述)。这是该值应存储在缓存中的秒数。传入None
fortimeout
将永远缓存该值。超时 0 不会缓存该值。
推荐阅读
- python - 使用触觉开关重新启动 Python 脚本
- docker - 无需root即可将docker登录到filebeat
- python-3.x - Pandas 从数据框中深度复制一行
- firebase - 在终端中部署功能成功但未出现在控制台中
- reactjs - 在 react js 中为容器编写单元测试用例
- java - Eclipse neon-ui-workbench 空指针异常?
- android - 尝试添加导航抽屉
- php - 使用payumoney付款成功后如何将所有数据存储在数据库中?
- javascript - 如何在ajax成功后从文档根目录触发文件下载
- javascript - 访问对象内部的数组