我知道 Django 的缓存功能会在指定的时间间隔(例如 1 分钟、1 小时等)过去后过期,但我有一些内容每天都会变化(例如“每日消息”)。理想情况下,该缓存会缓存 24 小时,但如果我将超时设置为 24 小时,则不能保证缓存会在午夜准确过期。处理这种情况的最佳做法是什么?
最佳答案
我想到了两个简单的选项,都涉及需要在(比如说)午夜运行的计划任务。
1) 领先一步:安排一些代码运行(例如自定义管理命令),要求您在午夜提供“每日消息”内容,并在 24 小时内到期。 (这假设相关的缓存键尚未设置)
2) 进行核化:安排在午夜进行缓存清除
或者,将两者结合起来:
不要进行核攻击,只需安排一次调用仅在午夜删除 MOTD key (例如cache.delete('motd_key'),然后缓存新 key 。
或者,如果您使用 Redis 作为缓存后端,则可以缓存 MOTD,然后创建 EXPIREAT调用以将缓存的 MOTD 条目设置为在 23:59:59 到期。 redis.py 将让你以Pythonic 的方式做到这一点。
如果您使用 Memcached 作为后端,您将无法获得这种程度的控制。
(如果您使用 locmem://,那么您就错了;o))
关于django - 如何在特定时间(例如午夜)清除 Django 模板缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23011573/