燕北茶 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日

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)