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

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 宇视监控服务器无法登录
  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥15 DruidDataSource一直closing
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥50 power BI 从Mysql服务器导入数据,但连接进去后显示表无数据