我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Django项目缓存优化的介绍及具体使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Django项目缓存优化的介绍及具体使用

这篇文章主要讲解了“Django项目缓存优化的介绍及具体使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Django项目缓存优化的介绍及具体使用”吧!

一、为什么要使用缓存

大家可以想一下Django的请求响应流程:

→ 用户浏览器输入URL地址

→ Web服务器将HTTP请求转发给uWSGI服务器

→ uWSGI服务器将Request请求转发给Django应用

→ Django中间件处理Request请求

→ 视图View处理

→ 模型类Models获取数据

→ 模板Template渲染

→ 再次经过Django中间件返回

→ uWSGI服务器将Response返回给Web服务器

→ Web服务器响应客户端的HTTP请求。

这其中耗时最多的2个环节通常是视图中业务逻辑处理和从Models获取数据(SQL查询),对于相同目的请求,也就是业务处理逻辑和SQL查询的数据都一样的请求,每次都进行了重复的计算,并且数据是从硬盘读取而非内存。

所以使用缓存有如下好处:

  • 降低服务器负载

  • 避免重复计算

  • 提高系统性能

二、如何进行缓存

很简单,一个Request请求过来,先去缓存中查询,有就返回;没有就去数据库查询并处理,然后把结果缓存好(供下次请求使用),再返回。用伪代码解释的话就是这样

Django项目缓存优化的介绍及具体使用

三、缓存的类型

1. Memcached 效率最高,最快的缓存2. Database caching 数据库缓存,这个指把数据缓存到数据表,比如你项目中使用的MySQL,就在MySQL中建表来专门缓存数据。不是指用Redis数据库3. Filesystem caching 文件系统缓存,将缓存会把键值存储到独立的文件中去4. Local-memory caching 使用系统内存缓存5. Dummy caching (for development) 假缓存,只在开发过程中使用,以调试缓存接口,数据并没有真正缓存6. Using a custom cache backend 自定义缓存后端,比如使用Redis

那么问题来了,我该使用哪种缓存呢?

其实常用的也就2种:Memcached或者Reids,其它基本不用考虑了。Redis国内用得多,支持RDB和AOF两种持久化方式,支持高可用集群,技术和方案很成熟。Memcached是纯内存存储,本身不支持持久化,不支持分布式,但是它内存管理效率高。

四、缓存粒度分类

  1. Per-site cache 把整个网站都缓存了,只需要在项目中设置加入缓存中间键的配置,系统便会自动对整个网站进行缓存

  2. Per-view cache 缓存某个视图

  3. Template fragment caching 模板的片段,比如Django模板继承base.html,通常是不变的导航栏

  4. Low-level cache API 低级别缓存API,比如缓存某个函数的结果,或者某个API接口

那么问题又来了,项目中我该选择什么样的缓存粒度?

是否需要缓存很简单,看内容是否变化。如果整个视图的数据通常都不变,就使用视图缓存,某些模板片段的数据不变就使用模板片段缓存等等。所以一个项目里面多种缓存粒度都有的

Django项目缓存优化的介绍及具体使用

五、Django缓存设置

这里只说一下Redis和Memcached的,其它很少用的就不罗列了,需要注意的是系统上要安装对应的缓存服务,Django开发环境中要安装连接缓存服务的包(比如django-redis或pymemcache)

Memcache缓存设置

最简单的,配置地址和端口,不一定是要在本机,也可以是其它网段的服务器或集群

Django项目缓存优化的介绍及具体使用

在本机的话,也可以使用unix Socket

Django项目缓存优化的介绍及具体使用

也可以使用多态服务器,不同端口缓存

Django项目缓存优化的介绍及具体使用

Redis缓存设置

截图一下实战课程中Redis缓存的配置,缓存网站的数据

Django项目缓存优化的介绍及具体使用

Django channels频道层的缓存

Django项目缓存优化的介绍及具体使用

Celery缓存,broker和任务的执行结果

Django项目缓存优化的介绍及具体使用

六、缓存的使用

对于Django项目缓存的数据,我们取出来或存进去操作,可以不需要直接操作底层的缓存数据,比如使用原生的Redis或Memcached命令,只需要使用Django提供的缓存API即可。就像我们使用Django ORM一样,无需关注底层数据库是MySQL, PostgreSQL或SQLite,ORM语句都一样。

例如,访问缓存

Django项目缓存优化的介绍及具体使用

使用缓存

Django项目缓存优化的介绍及具体使用

除了set(), get()还有get_or_set(), get_many(), set_many(), delete(), delete_many(), clear(), touch(), incr(), decr(), close()操作。大家可以去看看官网文档一个个操作下,要注意的是有的API不是每一个Django版本都有,比如cache.touch()是Django 2.1版本才有的。

七、Django缓存优化性能评估

缓存使用了,那效果怎么样,有什么指标可以衡量?用什么工具来衡量?

Django Debug Toolbar

这点在之前的Python学习教程中有跟大家讲到过!

django-debug-toolbar是一个开源的工具,可以在看板上展示django对request/response处理的详细信息,比如当前请求响应的CPU耗时,settings/headers/request信息,当前请求使用的模板文件,静态文件,具体SQL语句和执行时间等等,看板要显示什么信息是可以灵活配置的。

右边的栏目就是django-debug-tool的看板

Django项目缓存优化的介绍及具体使用

此页面共有9次SQL查询,耗时8.62毫秒

Django项目缓存优化的介绍及具体使用

缓存命中3次,cache.get(),用时约0.91毫秒

Django项目缓存优化的介绍及具体使用

感谢各位的阅读,以上就是“Django项目缓存优化的介绍及具体使用”的内容了,经过本文的学习后,相信大家对Django项目缓存优化的介绍及具体使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Django项目缓存优化的介绍及具体使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Django项目缓存优化的介绍及具体使用

这篇文章主要讲解了“Django项目缓存优化的介绍及具体使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Django项目缓存优化的介绍及具体使用”吧!一、为什么要使用缓存大家可以想一下Dj
2023-06-02

编程热搜