【问题标题】:How can I expire entries to Django database cache?如何使 Django 数据库缓存的条目过期?
【发布时间】:2018-08-21 12:27:39
【问题描述】:

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

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

我希望缓存中的条目在一周后过期并被删除。要从缓存中删除一个条目,只需执行以下操作:

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

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

如何做到这一点?谢谢。

【问题讨论】:

  • 在缓存中,可以设置一个过期时间。
  • 这怎么做呢?
  • redis_time_cache = 180 cache.set(key, data, redis_time_cache)

标签: python django django-cache


【解决方案1】:

我认为您在错误的级别上解决了问题: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 天,所以一周有,604800 秒.

通过在设置中添加此项,如果您以后改变主意,您可以轻松更改过期时间。

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

此外,您还可以 - 像 @marin says - 也 ad-hoc 在您 set(..) 时指定特定密钥的到期时间;正如documentation 中指定的:

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

(..)

timeout 参数是可选的,默认为timeout CACHES 设置中适当后端的参数 (上面解释过)。这是值应该是的秒数 存储在缓存中。为timeout 传入None 将缓存 永远的价值。超时 0 不会缓存该值。

【讨论】:

  • 关于 django 是否从数据库中剔除记录的任何线索?还是需要手动完成?
  • :( 我只想使所有记录的一小部分过期。具体来说,我想在任何兄弟记录更改(添加/删除/编辑)时使记录中的字段过期。这是唯一一次在我的情况下,缓存需要刷新......
【解决方案2】:
redis_time_cache = 180 # seconds
cache.set(key, data, redis_time_cache)
  1. key = 'my_key'
  2. 数据 = JSON 或 STRING
  3. redis_time_cache = TIMEOUT

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    相关资源
    最近更新 更多