django做redis缓存

django中应用redis:pip3 install django-redis
- 配置 CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"CONNECTION_POOL_KWARGS": {"max_connections": 100}
# "PASSWORD": "密码",
}
},
"d1": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"CONNECTION_POOL_KWARGS": {"max_connections": 100}
# "PASSWORD": "密码",
}
}
} - 使用
from django.shortcuts import render,HttpResponse
from django_redis import get_redis_connection def index(request):
# 去连接池中获取连接
conn = get_redis_connection("default")
conn.hset('n1','k1','v1')
return HttpResponse('...')

session 用 redis存储开启方式
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎
SESSION_CACHE_ALIAS = 'default' # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置 =================================
九、redis 补充 - 分布式、高可用、读写分离

redis
http://www.cnblogs.com/wupeiqi/articles/9348938.html
1. redis是什么?
是一个由C语言编写的对内存进行存取数据的软件(NoSQL数据库;非关系型数据库); 2. redis是单进程单线程的。 3. redis基础:
- 5大数据类型;
- 字符串
- 列表
- 字典
- 集合
- 有序结合
- 发布和订阅
- 事务 4. 主从 = 高可用 = HA 服务器A:10.211.55.19
redis-server /etc/redis-6379.conf # 内部bind:0.0.0.0 port: 6379
服务器B: 10.211.55.20
redis-server /etc/redis-6379.conf # 内部bind:0.0.0.0 port: 6379 slaveof: 10.211.55.19 特殊情况来了:如果主宕机,应该讲从切换成主;
手动:
- 登录redis将从变成主
- 修改代码,将连接字符串IP改成10.211.55.20
自动:
- keepalived,监听服务器的状态做高可用;第三方组件;
- sentinel(哨兵),检测redis主服务器的状态并将所有的slave获取到,一旦主挂掉,则立即将从切换成主;
redis-sentinel /etc/redis-sentinel-26379.conf(主IP,失败个数)
redis-sentinel /etc/redis-sentinel-26380.conf
redis-sentinel /etc/redis-sentinel-26381.conf Python操作:
from redis.sentinel import Sentinel # 连接哨兵服务器(主机名也可以用域名)
sentinel = Sentinel([('10.211.55.20', 26379)],socket_timeout=0.5) # # 获取主服务器地址
# master = sentinel.discover_master('mymaster')
# print(master)
#
# # # 获取从服务器地址
# slave = sentinel.discover_slaves('mymaster')
# print(slave)
#
#
# # # 获取主服务器进行写入
# master = sentinel.master_for('mymaster')
# master.set('foo', 'bar') # # # # 获取从服务器进行读取(默认是round-roubin)
# slave = sentinel.slave_for('mymaster', password='redis_auth_pass')
# r_ret = slave.get('foo')
# print(r_ret) 总结:
- 高可用
- 读写分离 5. 集群=分布式
如何实现分布式集群:
- codis,国产 豌豆荚 开源;
- twemproxy,twitter开源
- cluster,redis官方提供 redis的cluster的原理?
16384槽位 服务器A: 0-5000
服务器B: 5001-10000
服务器B: 10001 - 16384 Python操作redis cluester:
redis-py-cluster模块 6. 分布式锁 redlock算法
dlm = Redlock([{"host": "localhost", "port": 6379, "db": 0}, ])
# 如果 my_lock有值,则表示获取锁了
# 如果 my_lock无值,则表示未获取锁,别人获取走了。
my_lock = dlm.lock("my_resource_name",1000)
dlm.unlock(my_lock) # 删除时调用lru脚本 redis分布式锁实现原理:
1. 配置所有要连接的服务器并计算服务器一半的个数; 2. 获取锁:
- 传入参数:key,内部生成随机字符串,超时时间 - 循环所有服务器,在服务器上设置:
SET key 随机字符串 NX PX 超时时间 # 如果已经存在则不设置 - 设置成功的个数 >= 一半+1 且 花费时间小于超时时间 3. 释放锁
- 删除key和value(内部调用lru脚本)
- 超时释放 7. 其他:
- 持久化:
- AOF,记录所有命令;
- RDB,指定时间间隔做快照;
- 过期策略
voltile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰 volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰 volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰 allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰 allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰 no-enviction(驱逐):禁止驱逐数据
- 不要是直接使用:
- key
- all
一定要使用scan_iter

十、redis 补充 - 应用
http://www.cnblogs.com/wupeiqi/articles/5132791.html
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
5、发布订阅

发布者:服务器
订阅者:Dashboad和数据处理
Demo如下:
订阅者:
|
1
2
3
4
5
6
7
8
9
10
11
|
#!/usr/bin/env python# -*- coding:utf-8 -*-from monitor.RedisHelper import RedisHelperobj = RedisHelper()redis_sub = obj.subscribe()while True: msg= redis_sub.parse_response() print msg |
发布者:
|
1
2
3
4
5
6
7
|
#!/usr/bin/env python# -*- coding:utf-8 -*-from monitor.RedisHelper import RedisHelperobj = RedisHelper()obj.public('hello') |
6. sentinel
redis重的sentinel主要用于在redis主从复制中,如果master顾上,则自动将slave替换成master
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
#!/usr/bin/env python# -*- coding:utf-8 -*-from redis.sentinel import Sentinel# 连接哨兵服务器(主机名也可以用域名)sentinel = Sentinel([('10.211.55.20', 26379), ('10.211.55.20', 26380), ], socket_timeout=0.5)# # 获取主服务器地址# master = sentinel.discover_master('mymaster')# print(master)## # # 获取从服务器地址# slave = sentinel.discover_slaves('mymaster')# print(slave)### # # 获取主服务器进行写入# master = sentinel.master_for('mymaster')# master.set('foo', 'bar')# # # # 获取从服务器进行读取(默认是round-roubin)# slave = sentinel.slave_for('mymaster', password='redis_auth_pass')# r_ret = slave.get('foo')# print(r_ret) |
django做redis缓存的更多相关文章
- django - 总结 - redis缓存
八.redis 补充- 操作 - 增删改查 对字典,重新设计结构,增删改查. hmset keys hget scan_iter hgetall import redis import j ...
- django memcached/redis缓存 =====缓存session
全站使用 例如 博客等缓存,通过中间件实现全站缓存. 加缓存中间件,那么多中间件加在什么位置? 请求时:缓存加在中间件里的最后一个,比如一次经过1.2.3.4中间件,加在4 返回事:缓存加在中间件里的 ...
- django使用redis做缓存
Django 使用 Redis 做缓存 django中应用redis:pip3 install django-redis - 配置 CACHES = { "default": { ...
- Django之使用redis缓存session,历史浏览记录,首页数据实现性能优化
Redis缓存session 配置Django缓存数据到redis中 # diango的缓存配置 CACHES = { "default": { "BACKEND&quo ...
- Django缓存机制以及使用redis缓存数据库
目录 Django 配置缓存机制 缓存系统工作原理 Django settings 中 默认cache 缓存配置 利用文件系统来缓存 使用Memcache来缓存: 使用Local-memory来缓存: ...
- celery介绍、架构、快速使用、包结构,celery执行异步、延迟、定时任务,django中使用celery,定时更新首页轮播图效果实现,数据加入redis缓存的坑及解决
今日内容概要 celery介绍,架构 celery 快速使用 celery包结构 celery执行异步任务 celery执行延迟任务 celery执行定时任务 django中使用celery 定时更新 ...
- Spring Boot使用redis做数据缓存
1 添加redis支持 在pom.xml中添加 <dependency> <groupId>org.springframework.boot</groupId> & ...
- Django中的缓存(内存,文件,redis)
一.Django中的缓存的几种方法 1)单个视图缓存.时间测试 import time from django.views.decorators.cache import cache_page @ca ...
- django 常用方法总结 < 手写分页-上传头像-redis缓存,排行 ...>
1.不使用自带模块<Paginator>的手写分页功能views.pydef post_list(request): page = request.GET.get('page', 1) # ...
随机推荐
- Anya and Cubes CodeForces - 525E (双端搜索)
大意: 给定$n$元素序列$a$, 可以任选不超过$k$个$a_i$变换为$a_i!$, 求变换后任选若干元素和为S的方案数. 分成两块暴搜, 复杂度$O(3^{\frac{n}{2}})$ #inc ...
- Linux命令详解-file
file命令用来识别文件类型,也可用来辨别一些文件的编码格式.它是通过查看文件的头部信息来获取文件类型,而不是像Windows通过扩展名来确定文件类型的. 1.命令格式: file [ -bchikL ...
- HDU - 4436sam裸题
题意:给你多个数字串,求本质不同的子串和(去掉前导零) 题解:建广义sam,刚开始一直想的是用l来计算,发现前导零对l的影响根本消不掉,所以不会做= =,原来应该是直接用一个新的数组表示到当前有多少个 ...
- MVC实战之排球计分(二)—— 构架概要设计
本程序主要基于MVC4框架,使应用程序的输入,处理和输出强制性分开,使得软件可维护性,可扩展性,灵活性以及封装性得到提高, MVC应用程序分为三个核心部件:Model,View, Controller ...
- jquery 表单提交不用action
1.今天我做完事去看了一下别人的代码,不用我们很常规的写法.我想让我们来学习一下吧! <form class="form-inline form-mess">//内容在 ...
- Oracle11g温习-第十二章:tables
2013年4月27日 星期六 10:44 1.表的功能 存储.管理数据的基本单元(二维表:由行和列组成) 2.表的类型 1)普通表:[heap table(堆表) :数据存储时,无序的,对它的访问采 ...
- mysqldump导出报错"mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table `file_storage` at row: 29"
今天mysql备份的crontab自动运行的时候,出现了报警,报警内容如下 mysqldump: Error 2013: Lost connection to MySQL server during ...
- ScheduledThreadPoolExecutor
java提供了方便的定时器功能,代码示例: public class ScheduledThreadPool_Test { static class Command implements Runnab ...
- Linux只下载不安装软件包
有时我们并不需要安装软件而只要下载软件包. 包格式 命令 命令所属包 命令下载格式 rpm yumdownloader yum-utils yumdownloader package_name deb ...
- angular4,angular6中解决内层盒子到底外层盒子滚动
//用来处理 里盒子滚完外盒子滚的问题 scrollUnique(who){ document.getElementsByClassName(who)[0].addEventListener('mou ...