我使用django的内置缓存和@cache_page
装饰器。但是,我希望自动定期刷新缓存,以便用户的实际页面请求不会触发刷新,从而导致延迟。
想到一个明显的策略是使用芹菜任务。我有两个问题:
答案 0 :(得分:0)
我认为芹菜的任务是一种矫枉过正。有一个定义缓存过期的设置:
CACHE_MIDDLEWARE_SECONDS
- 每个页面应缓存的秒数。
参考:Django docs
这已在1.8中引入,并影响@cache_page
的持续时间。不要将其与CACHES: TIMEOUT
设置混淆,后者用于使用cache.set()
等缓存功能。有关here的更多信息。
答案 1 :(得分:0)
我最后使用requests框架编写芹菜任务,每小时刷新缓存 - 它还处理分页。示例代码:
@shared_task
def refresh_caches():
header = {"Content-Type": "application/json; charset=utf-8",
"Authorization": settings.USER_TOKEN}
next_page_url = settings.API_URL +'/products/'
while len(next_page_url) > 0:
response = requests.get(next_page_url, headers=header)
next_page_url = ''
jsonresponse = response.json()
if jsonresponse.get('next'):
next_page_url = jsonresponse['next']