我们如何使用相同路由的DRF中的cache_page刷新缓存来获得更新的数据



该网站在功能上与Twitter类似,我们正在为提要使用Django缓存机制,但当用户创建他的帖子时,由于缓存,他在接下来的10分钟内无法找到他的帖子,我们想向用户显示最新结果,因此,我们如何在使用相同的路线创建帖子后向用户显示最新数据

这是urls.py代码

from django.views.decorators.cache import cache_page
from . import views
CACHE_TIME=60*10
urlpatterns = [
path('', cache_page(CACHE_TIME)(views.PostListAPIView.as_view()), name="post-list")
]

如果我们调用API-->http://127.0.0.1:8000/v1/posts/然后数据将在接下来的10分钟内存储在缓存中,但我想在特定事件之后刷新,所以,我们如何在10分钟之前获得更新的数据

此外,如果我们通过了,我们已经找到了解决方案http://127.0.0.1:8000/v1/posts/?{username}=true,那么我们可以为用户获取最新数据,但还有其他更好的方法或可能性来显示最新数据吗?如果是,请列出该方法及其一些详细信息

在许多情况下,您需要删除旧缓存。你很快就会得到它们。关于你的问题,我认为你只需要涵盖一个案例:在添加帖子后使缓存无效。

这是最适合您的方法:

  1. 使用信号检测何时添加帖子
  2. 从django缓存文档中,它说cache.delete("key"(应该足够了。所以只需要使用它,并在需要时调用一个函数来预热缓存

样本代码

@receiver(post_save, sender=Post)
def invalidate_post_list_cache(sender, instance, **kwargs):
"""
This signal helps invalidate post list cache and warm-up cache
"""
cache.delete('key')
call_function_to_warm_up_cache()

计算机科学中只有两件困难的事情:缓存失效和命名——Phil Karlton

最新更新