【Django 021】Django2.2利用装饰器和cache底层API两种方式实现Redis缓存原理和操作详解

cache,也就是缓存,对于网页应用的快速响应是非常必须的,毕竟没有谁愿意一直等着服务器返回数据。那么缓存在前面学习的MTV模型中处于哪一环节?究竟有多少种缓存方式?又该如何将数据放入缓存呢?这一节我们一起来看看这些问题。

我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。

操作环境

先总结下我的操作环境:

  • Centos 7
  • Python 3.7
  • Pycharm 2019.3
  • Django 2.2

因为Django长期支持版本2.2LTS和前一个长期支持版本1.11LTS有许多地方不一样,需要小心区分。

环境准备

离开之前的项目,新建一个DjangoCache项目。

步骤和之前是一样的,这里就不详细演示每一步的操作了:

  1. virtualenv创建虚拟环境,这里可以直接用之前的虚拟环境。记得activate环境
  2. django-admin startproject DjangoCache新建项目
  3. pycharm打开项目,注意是在manage.py的上一级打开
  4. 配置解释器为虚拟环境内的python,前一个项目的第三方包都会自动识别
  5. python manage.py startapp App新建一个应用,并在settings中注册
  6. mysql创好数据库DjangoCache,每次都用新的库,不然会有问题
  7. 修改配置文件settings.py,包括数据库连接信息,全局templates文件路径等等
  8. 全局__init__.py中对pymysql进行伪装pymysql.install_as_MySQLdb()
  9. 默认数据迁移python manage.py migrate
  10. App应用新建urls.py并include到项目的urls.py中,设置好namespace

cache的原理

cache就是缓存的意思,这里直接翻译一下官方文档的介绍。

对一个东西进行cache,就是将一个耗时的复杂运算的结果进行保存,这样下次进行同样访问的时候不用再重复进行计算

To cache something is to save the result of an expensive calculation so that you don’t have to perform the calculation next time

官方还给了一段伪代码来说明

given a URL, try finding that page in the cache
if the page is in the cache:
    return the cached page
else:
    generate the page
    save the generated page in the cache (for next time)
    return the generated page

所以应该就是将view函数返回的HttpResponse对象进行了cache,下次访问同样的view函数,如果cache还没过期就直接返回cache中的内容。如果cache过期了就重新运行一下view函数进行返回。

Django中的cache

流程图

按照上面的伪代码,我自己画了一个简单的流程图来对比一下加了cache前后的流程变化
1-Django_cache.jpg
没有加cache的时候,流程从①到⑧按照顺序;有了cache以后,当view.py中的view函数配置了cache,程序直接去cache中进行查找,有则直接⑨到⑩然后到⑦;如果cache已经过期则⑨到⑩再去③重复一遍没cache的流程并⑥以后除了返回结果给⑦,还要把结果放进cache以便下一次查询。

Django内置的cache种类

  • 基于Memcached缓存
    Memcached是一种内存数据库,所有数据保存在内存中,所以速度非常快,而且Django原生支持。但是因为Redis的走红,Memcached有被逐步取代的趋势。不过因为Redis没有被Django原生支持,所以要额外安装第三方模块再使用。建议使用Redis而不是Memcached。

  • 基于数据库缓存
    和普通数据模型差不多,关联一张表专门用来存储cache。因为只是单张表,没有额外关联,所以速度相对会快很多。

  • 基于文件系统缓存
    将数据保存在磁盘中,因为磁盘和内存的速率相差几万倍,这种方式速度并不快,所以不做推荐

  • 基于本地内存缓存
    如果系统无法支持Memcached或者Redis这种内存数据库,直接存在本地内存中也是可以。但是这样别的设备就无法共享cache内容了。也不做推荐

  • 自定义缓存
    例如安装第三方的Redis模块来使用。

Django中cache设计宗旨

按照

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值