自动刷新缓存

时间:2016-07-28 06:30:23

标签: django caching

我使用django的内置缓存和@cache_page装饰器。但是,我希望自动定期刷新缓存,以便用户的实际页面请求不会触发刷新,从而导致延迟。

想到一个明显的策略是使用芹菜任务。我有两个问题:

  1. 如果celery任务方法是可接受的,我需要什么代码a)触发刷新和b)未知数量的页面,例如myapp.com/products/?page=2,myapp.com/products/?page=3(我无法预测页数)
  2. 有更好的方法吗?

2 个答案:

答案 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']
相关问题