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: '123', 字符串 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:lqzcache', # 指定缓存的路径 '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 #设置缓存的秒数 #######################以上是以文件的形式配置缓存###################
redis的使用: python操作redis pip3 install redis #安装模块 快速使用: import redis conn = redis.Redis(host='127.0.0.1',port=6379) conn.set('age','18') #给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内,并统计返回其值的字符串个数