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. 用js简单实现一下迪克斯特拉算法

    今天看书看到了迪克斯特拉算法,大概用js实现一下呢,计算最短路径. 首先,迪克斯特拉算法只适用于有向无环图,且没有负权重,本例关系图如下哦,数字为权重,emmmm,画得稍微有点丑~ //大概用js实现 ...

  2. 【缓存算法】FIFO,LFU,LRU

    一.FIFO算法 FIFO(First in First out),先进先出.其实在操作系统的设计理念中很多地方都利用到了先进先出的思想,比如作业调度(先来先服务),为什么这个原则在很多地方都会用到呢 ...

  3. Git自动化合并多个Commit

    目录 git rebase逻辑 git editor的修改 处理git-rebase-todo文件 Python实现 当我们有多个commit或者从开源处拿到多个commit时,想合成一个commit ...

  4. QQ浏览器中时区bug

    在QQ浏览器 4.4.119.400 版本中,通过new Date('2018-11-11').getTime(); 获取的时间不是东8区的时间戳,而是0时区的时间戳,这就导致了获取的时间与实际的时间 ...

  5. xmind 8 便携版:关联文件后,双击打开文件,在当前文件夹产生configuration子文件的问题解决办法

    Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.xmind] @="XMind.Workbook.3" " ...

  6. Tomcat 多个虚拟主机配置方法

    conf/server.xml 移除注释内容后,类似内容如下: <Server> …… …… …… <Service name="Catalina"> &l ...

  7. 【C++】如何接收函数return返回来的数组元素

    转自 https://www.cnblogs.com/Wade-James/p/7965775.html 我们知道return语句作为被调用函数的结束,返回给调用者函数值.一般来说,是返回一个函数值, ...

  8. 黄聪:C#使用GeckoFx拦截监控Http数据

    找了整整两天,在大海捞针之后,终于在上古代码中找到了一个可用的.... 可以用喜极而泣来形容测试有效之后的心情!!! 跟cefsharp相比geckofx最大的优点就是模式更接近于IE,包括node. ...

  9. mybatis中大于等于小于等于的写法

    标准写法如下: 第一种写法(1): 原符号 < <= > >= & ' "替换符号 < <= > >= & &apos ...

  10. JIRA的邮件通知

    提交测试或提交上线申请时发送给相关的开发人员.测试人员.运维人员. 使用插件Notification