您的位置:MYSQL中文网 > django缓存原理 Django4.0 缓存框架-下游缓存

django缓存原理 Django4.0 缓存框架-下游缓存

2023-03-24 15:30 Django4中文教程

django缓存原理 Django4.0 缓存框架-下游缓存

django缓存原理

Django缓存是一种技术,它可以帮助您提高Web应用程序的性能。它通过将数据存储在内存中,以便在需要时可以快速访问,而不必重新生成数据。这样可以减少Web应用程序的响应时间,并且可以减少服务器上的负载。

Django缓存原理是将数据存储在内存中,而不是在数据库中。当请求到达服务器时,Django会先检查内存中是否有相关的数据。如果有,它会立即返回该数据;如果没有,它会去数据库中寻找相关的数据。一旦找到了相关的数据,Django会将其保存到内存中,以便下一个请求可以立即使用。

# 获取缓存对象
cache = caches['default']  # 默认使用default配置 
# 获取key对应的value 
value = cache.get(key)  # 如key不存在则返回None 
# 获取多个key对应的value 
values = cache.get_many(keys) # 如keys不存在则返回{} 
# 获取所有key-value 
all_values = cache.get_all() # 如cache为空则返回{} 
# 设置key-value, timeout=None表示永久保留 
cache.set(key, value, timeout=None)   # 成功返回True, 失败返回False  
# 批量设置多个key-value, timeout=None表示永久保留  
cache.set_many(mapping, timeout=None) # 成功返回True, 失败返回False  
# 删除单个key-value  
cache.delete(key) # 成功返回True, 失败返回False  
# 批量删除多个key-value  
cache.delete_many(keys) # 成功返回True, 失败返回False   

Django4.0 缓存框架-下游缓存

到目前为止,本文档的重点是缓存您自己的数据。 但是另一种类型的缓存也与 Web 开发相关:由“下游”缓存执行的缓存。 这些系统甚至在请求到达您的网站之前就为用户缓存页面。

下面是一些下游缓存的例子:

  • 使用 HTTP 时,您的 ISP 可能会缓存某些页面,因此如果您从 http://example.com/ 请求页面,您的 ISP 将向您发送该页面,而无需直接访问 example.com。 example.com 的维护者不知道这种缓存; ISP 位于 example.com 和您的 Web 浏览器之间,透明地处理所有缓存。 这种缓存在 HTTPS 下是不可能的,因为它会构成中间人攻击。
  • 您的 Django 网站可能会在一个代理缓存的后面,例如Squid 网页代理缓存,为了性能而缓存页面。在这种情况下,每个请求首先由代理来处理,只有在需要时才将其传递给应用程序。
  • 您的网络浏览器也会缓存页面。 如果网页发送了适当的标头,您的浏览器将使用本地缓存副本来处理对该页面的后续请求,甚至无需再次联系该网页以查看它是否已更改。

下游缓存是一个很好的效率提升,但它存在一个危险:许多网页的内容基于身份验证和许多其他变量而有所不同,并且缓存系统盲目地仅基于 URL 保存页面可能会将不正确或敏感的数据暴露给后续这些页面的访问者。

例如,如果您使用网络电子邮件系统,那么收件箱页面的内容取决于登录的用户。如果 ISP 盲目缓存您的站点,那么通过该 ISP 登录的第一个用户将拥有他们的用户 - 为该站点的后续访问者缓存的特定收件箱页面。

幸运的是,HTTP 为这个问题提供了解决方案。存在许多 HTTP 报头以指示下游缓存根据指定的变量来区分它们的缓存内容,并且告诉缓存机制不缓存特定的页面。


阅读全文
以上是MYSQL中文网为你收集整理的django缓存原理 Django4.0 缓存框架-下游缓存全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 MYSQL中文网 mysqlcn.com 版权所有 联系我们
桂ICP备12005667号-29 Powered by CMS