燕北茶 2022-03-23 19:52 采纳率: 50%
浏览 58
已结题

Django 在URL路由上使用cache_page缓存后,更新数据如何及时清除对应的路由缓存

问题遇到的现象和发生背景

用户访问页面会提供一个清单列表
此时的清单列表在Django采用了缓存操作,使用的是redis缓存,因为view视图应用是使用的类方法,所以cache_page在路由页面。

from django.urls import path
from django.views.decorators.cache import cache_page
urlpatterns=[
  path('<str:username>/address',cache_page(600)(views.AddressView.as_view())),
]
我想要达到的结果

问题:
请教,在用户对列表信息修改后,怎样才能对路由中对应的cache_page()缓存进行清空,然后使用户访问时可以重新缓存到新的数据列表,而不是等到缓存到期后才能显示。

我的解答思路和尝试过的方法
  • 写回答

2条回答 默认 最新

  • ~白+黑 Python领域新星创作者 2022-03-23 20:25
    关注
    
    
    cache.delete(key, version=None)¶
    
    你可以使用 delete() 显示地删除键,以清空特定对象的缓存:
    
    >>> cache.delete('a')
    True
    
    如果键被成功删除,将返回 delete() ,否则返回 False 。
    
    cache.delete_many(keys, version=None)¶
    
    如果你想一次性清除很多键,给 delete_many() 传递一个键列表即可删除。
    
    >>> cache.delete_many(['a', 'b', 'c'])
    
    cache.clear()¶
    
    最后,如果你想删除缓存里的所有键,使用 cache.clear()。注意,clear() 将删除缓存里的 任何 键,不只是你应用里设置的那些键。
    
    >>> cache.clear()
    
    cache.touch(key, timeout=DEFAULT_TIMEOUT, version=None)¶
    
    cache.touch() 为键设置一个新的过期时间。比如,更新一个键为从现在起10秒钟后过期:
    
    >>> cache.touch('a', 10)
    True
    
    和其他方法一样,timeout 参数是可选的,并且默认是 CACHES 设置的相应后端的 TIMEOUT 选项。
    
    如果键被成功 touch(),将返回 True,否则返回 False

    https://docs.djangoproject.com/zh-hans/4.0/topics/cache/

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月1日
  • 已采纳回答 3月24日
  • 创建了问题 3月23日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度