Django 自动刷新缓存

Django 自动刷新缓存,django,caching,Django,Caching,我将django的内置缓存与@cache\u页面装饰器一起使用。但是,我希望缓存能够定期自动刷新,以便刷新不会由用户的实际页面请求触发,从而导致延迟 想到的一个明显的策略是使用芹菜任务。我有两个问题: 如果芹菜任务方法可以接受,我需要什么代码来a)触发刷新和b)未知页数,例如myapp.com/products/?page=2,myapp.com/products/?page=3(我无法预测页数) 有更好的方法吗 我认为用芹菜来做这件事太过分了。有一个定义缓存过期的设置: CACHE\u SEC

我将django的内置缓存与
@cache\u页面
装饰器一起使用。但是,我希望缓存能够定期自动刷新,以便刷新不会由用户的实际页面请求触发,从而导致延迟

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

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

  • 我认为用芹菜来做这件事太过分了。有一个定义缓存过期的设置:

    CACHE\u SECONDS
    –每个页面应缓存的秒数

    参考:


    这已在1.8中引入,并影响
    @cache\u页面的持续时间。不要将其与用于使用缓存功能(如
    cache.set()
    )的
    CACHES:TIMEOUT
    设置混淆。更多信息。

    我认为芹菜任务对于这一点来说是过火了。有一个定义缓存过期的设置:

    CACHE\u SECONDS
    –每个页面应缓存的秒数

    参考:


    这已在1.8中引入,并影响
    @cache\u页面的持续时间。不要将其与用于使用缓存功能(如
    cache.set()
    )的
    CACHES:TIMEOUT
    设置混淆。更多信息。

    最后,我使用框架编写了一个芹菜任务,每小时刷新一次缓存—它还处理分页。示例代码:

    @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']
    

    最后,我编写了一个芹菜任务,使用该框架每小时刷新一次缓存—它还处理分页。示例代码:

    @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']
    

    我知道缓存超时了。我想防止的是用户发起的刷新缓存的请求导致延迟-我想手动触发缓存刷新。@RunLoop我明白了。我的理解是,用户请求不应该扩展缓存,它将在设置后的
    cache\u MIDDLEWARE\u SECONDS
    过期,但我们需要深入代码以确认这一点。这是一个问题,但当你甚至不想这样做,需要手动使其过期。我理解缓存超时。我想防止的是用户发起的刷新缓存的请求导致延迟-我想手动触发缓存刷新。@RunLoop我明白了。我的理解是,用户请求不应该扩展缓存,它将在设置后的
    cache\u MIDDLEWARE\u SECONDS
    过期,但我们需要深入代码以确认这一点。这是一个问题,但当你甚至不想,并需要手动过期。