django的缓存的用法讲解

1. django缓存: 缓存的机制出现主要是缓解了数据库的压力而存在的

2. 动态网站中,用户的请求都会去数据库中进行相应的操作,缓存的出现是提高了网站的并发量

3. django的缓存分为 : 三种粒度, 六种缓存方式:

4. 什么是三种粒度: 全站缓存, 单页面缓存, 页面中局部缓存

6. 六种缓存方式: 开发调试缓存, 内存缓存, 文件缓存, 数据库缓存, Memcache缓存(使用python-memcached, pylibmc 两种)

7. 在Django缓存中使用的最多的是: 文件缓存 与 redis缓存
8. redis 与 memcached 的区别:
mysql , oracle : 关系型数据库
redis, mongodb: 非关系型数据库 /nosql
redis 存在存中中的
mongodb 存在硬盘上 redis 一般用来:
做缓存
session数据
游戏排行榜
对速度要求比较高的数据的存储
做消息队列
redis 是key-value的存储, 支持持久化, 有五大数据类型
字符串
列表
字典
集合
有序集合 比较redis与Memcached:
redis 支持五大数据类型
redis 支持持久化
单线程,单进程, 速度非常快
memcached 不能支持持久化,只支持字符串 redis 支持的五大数据类型:
redis ={
k1: '', 字符串
k2: [1,2,3] 列表
k3: {1,2,3} 集合
k4: {name:gukai,age:18} 字典/哈希表
k5: {('gukai',18),('lqz',33)} 有序集合
}
9. 配置一个文件当作缓存:
第一步: 在 setting中配置:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', # 指定缓存使用的引擎
'LOCATION': 'D:\lqz\cache', # 指定缓存的路径
'TIMEOUT': 300, # 缓存超时时间(默认为300秒,None表示永不过期)
'OPTIONS': {
'MAX_ENTRIES': 300, # 最大缓存记录的数量(默认300)
'CULL_FREQUENCY': 3, # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
}
}
} 第二步: 在视图类中使用:
import time # 这是在单页面缓存 (使用装饰器)
from django.views.decorators.cache import cache_page
# 代表缓存5s
@cache_page(5)
def cache_test(request):
print('走视图函数')
ctime=time.time()
return render(request,'index.html',locals()) # 这是在局部使用:
{ % load cache %}
# 传两个参数:第一个参数是超时时间,第二个参数是key值,唯一的标志#
{ % cache 5 'ttt' %}
当前时间是:{{ctime}}
{ % endcache %} # 这是在全站缓存: 在MIDDLEWARE中添加
MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware', #添加生效全局缓存
#处理跨域的中间件
'app01.mycsrf.MyMiddleware', 'django.middleware.cache.FetchFromCacheMiddleware' #添加生效全局缓存
] CACHE_MIDDLEWARE_SECONDS=5 #设置缓存的秒数 #######################以上是以文件的形式配置缓存###################

第一种django的缓存方式-用文件形式的缓存

redis的使用:
python操作redis pip3 install redis #安装模块 快速使用:
import redis conn = redis.Redis(host='127.0.0.1',port=6379)
conn.set('age','') #给redis添加数据
conn.set('name','gukai')
name = conn.get('name') #给redis获取数据
print(name) redis 设置连接池: 使用单例模式 第一步: 创建一个py文件: 创建conn_pool.py
import redis POOL=redis.ConnectionPool(host='127.0.0.1',port=6379,max_connections=1000) 第二步: 调用conn_pool.py文件
# 连接池
#生成一个池子,默认有好多连接
from conn_pool import POOL
# 每次执行这句话,从池子中取一个链接
conn=redis.Redis(connection_pool=POOL) print(conn.get('name')) ###########这里就完成了单例模式的redis redis 重点掌握的: get, set, mget, mset, incr, decr,append conn.set('name','egon') #添加数据 set有几个属性需要掌握的
例题: set(name, value, ex=None, px=None, nx=False,xx=False)
name: 就是 设置key值
value: 就是 设置value的值
ex: 设置 过期的时间(秒)
px: 设置 过期的时间(毫秒)
nx: 设置为True 则只有name不存在的时间,才创建,如果name存在就不修改
xx: 设置为True 则只有name存在的时间, 当前set操作才执行,值存在才能修改,值不存在,不会设置新的值 conn.get('name') #获取数据 conn.mset({'name':'gukai','age':28}) #可以一次插入多条数据 conn.mget('name','age') #一次查询多条数据 conn.incr('age', amount=1) #自定年龄+1 多数用于访问量的 访问一次+1
conn.decr('age') #自定义年龄-1 conn.append('age','pp') #添加数据在values内,并统计返回其值的字符串个数

第二种用redis做缓存的

django之缓存的用法, 文件形式与 redis的基本使用的更多相关文章

  1. 初试Django的缓存系统

    初试Django的缓存系统 现在我网页的逻辑是,响应请求,查找数据库相关信息,渲染模版生成最终页面,最后返回.使用缓存后就是将这个页面保存一段时间,在有响应请求相同页面的时候,可以直接返回,不用再做那 ...

  2. Django与缓存

    我们都知道Django建立的是动态网站,正常情况下,每次请求过来都经历了这样一个过程: 接收请求 -> url路由 -> 视图处理 -> 数据库读写 -> 视图处理 -> ...

  3. Django的缓存

    由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显, 最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中, ...

  4. django的缓存,信号,序列化

    一 Django的缓存机制 1.1 缓存介绍 1.缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的 ...

  5. Django 分页器 缓存 信号 序列化

    阅读目录 分页器 缓存 信号 序列化 Django分页器  (paginator) 导入 from django.core.paginator import Paginator, EmptyPage, ...

  6. Django的缓存机制和信号量相关

    缓存介绍 缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一次的的后台操作 ...

  7. Django 之 缓存机制

    Django 缓存机制 缓存介绍 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一次 ...

  8. Django day31 contentType组件,Django的缓存

    一.contentType组件 1.干什么用的? 是一个django内置的一个组件,方便我们快速的连表操作 2.这两个字段都不会在数据库中生成,他只是用来查询,插入的 -在course表中: poli ...

  9. Django之缓存机制

    1.1 缓存介绍 1.缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一次 ...

随机推荐

  1. C51单片机_day_01(定时器和中断系统)

                c51单片机 51单片机是控制电路系统的开关,当然芯片就是51芯片,现在随着科技的发展,也是出了很多,功能更多,更全的芯片. 51是用c语言做为程序编程的语言 ——我对基本基础 ...

  2. Python爬取今日头条段子

    刚入门Python爬虫,试了下爬取今日头条官网中的段子,网址为https://www.toutiao.com/ch/essay_joke/源码比较简陋,如下: import requests impo ...

  3. java单例设计模式总结及举例

    * 设计模式:前人总结出来的经验,被后人直接拿来使用. * 单例设计模式:一个类只允许有一个对象,将这个对象作为一个全局的访问点,提供出去供大家使用. * 分析: * 1.用户只能有一个对象 * 2. ...

  4. Boot Hill 布特山

    发售年份 1977 平台 街机 开发商 Midway 类型 射击 https://www.youtube.com/watch?v=yFVZhSCjo6w

  5. HI3518EV200+AR0130开发板烧录uboot、kernel、rootfs及其参数配置

    分区名 分区大小 起始地址 截至地址bootloader:1M 0x00000000 0x00100000kernel: 3M 0x00100000 0x00400000rootfs: 12M 0x0 ...

  6. CWMP开源代码研究6——libcwmp动态库开发

    原创作品,转载请注明出处,严禁非法转载.如有错误,请留言! email:40879506@qq.com 为了使程序具有通用性,便于扩展和维护.采用了"模块"插入的思想.将设备业务相 ...

  7. 记录一个源码安装mysql5.6的方法

    https://www.jb51.net/article/118853.htm 如果之前源码安装过mysql5.6的话,卸载方法如下:rm -rf /var/lib/mysql/rm -rf /usr ...

  8. c# 程序只能运行一次(多次运行只能打开同一个程序)

    转自:https://social.msdn.microsoft.com/Forums/zh-CN/6398fb10-ecc2-4c03-ab25-d03544f5fcc9/2291420309357 ...

  9. 关于FIFO memory buffer模块的设计

    关于FIFO memory buffer模块的设计 FIFO memory `timescale 1ns / 1ps ///////////////////////////////////////// ...

  10. Apache HTTP Server 与 Apache Tomcat 的区别

    要明白他们之间的区别,我们首先需要明白HTTP协议.HTML页面.JSP.Servlet之间的区别和联系. HTTP协议是在TCP/IP协议之上的应用层协议,用以在客户端和服务器之间传递信息.一般传递 ...