安装python
yum install -y python36 python3 -V yum install -y python36-pip sentinel使用:pip3 install redis 集群使用:pip3 install redis-py-cluster ++++++++++++源码方式+++++++++++++++ https://redis.io/clients 下载redis-py-master.zip 安装驱动: unzip redis-py-master.zip cd redis-py-master python3 setup.py install redis cluster的连接并操作(python2.7.2以上版本才支持redis cluster,我们选择的是3.6) https://github.com/Grokzen/redis-py-cluster 安装redis-cluser的客户端程序 cd redis-py-cluster-unstable python3 setup.py install +++++++++++++++++++++++++++++++++
对redis的单实例进行连接操作
[root@db01 ~]# redis-server /data/6379/redis.conf [root@db01 ~]#python3 >>>import redis >>> r = redis.StrictRedis(host='10.0.0.200', port=6379, db=0,password='123456') >>> r.set('oldboy', 'oldguo') True >>> r.get('oldboy') b'oldguo'
sentinel集群连接并操作
[root@db01 ~]# redis-server /data/6380/redis.conf [root@db01 ~]# redis-server /data/6381/redis.conf [root@db01 ~]# redis-server /data/6382/redis.conf [root@db01 ~]# redis-sentinel /data/26380/sentinel.conf & -------------------------------- ## 导入redis sentinel包 [root@db01 26380]# python3 >>>from redis.sentinel import Sentinel ##指定sentinel的地址和端口号 >>> sentinel = Sentinel([('localhost', 26380)], socket_timeout=0.1) ##测试,获取以下主库和从库的信息 >>> sentinel.discover_master('mymaster') ('127.0.0.1', 6381) >>> sentinel.discover_slaves('mymaster') [('127.0.0.1', 6380), ('127.0.0.1', 6382)]
配置读写分离
#写节点 [root@db01 26380]# python3 >>> master = sentinel.master_for('mymaster', socket_timeout=0.1,password="123") #读节点 >>> slave = sentinel.slave_for('mymaster', socket_timeout=0.1,password="123") ###读写分离测试 key >>> master.set('oldboy', '123') >>> slave.get('oldboy')
python连接rediscluster集群测试
退出python3重连 [root@db01 26380]# python3 >>> from rediscluster import StrictRedisCluster >>> startup_nodes = [{"host":"127.0.0.1", "port": "7000"},{"host":"127.0.0.1", "port": "7001"},{"host":"127.0.0.1", "port": "7002"}] ### Note: decode_responses must be set to True when used with python3 >>> rc = StrictRedisCluster(startup_nodes=startup_nodes, decode_responses=True) >>> rc.set("foo", "bar") True >>> print(rc.get("foo")) 'bar' ------------------------------------- >>> from rediscluster import StrictRedisCluster Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: cannot import name 'StrictRedisCluster' 报错解决办法: [root@db01 26380]# pip3 install redis==2.10.6 [root@db01 26380]# pip3 install redis-py-cluster==1.3.5
其他概念
缓存穿透
概念 访问一个不存在的key,缓存不起作用,请求会穿透到DB,流量大时DB会挂掉。 解决方案 采用布隆过滤器,使用一个足够大的bitmap,用于存储可能访问的key,不存在的key直接被过滤; 访问key未在DB查询到值,也将空值写进缓存,但可以设置较短过期时间。
缓存雪崩
概念 大量的key设置了相同的过期时间,导致在缓存在同一时刻全部失效,造成瞬时DB请求量大、压力骤增,引起雪崩。 解决方案 可以给缓存设置过期时间时加上一个随机值时间,使得每个key的过期时间分布开来,不会集中在同一时刻失效。
缓存击穿
概念 一个存在的key,在缓存过期的一刻,同时有大量的请求,这些请求都会击穿到DB,造成瞬时DB请求量大、压力骤增。 解决方案 在访问key之前,采用SETNX(set if not exists)来设置另一个短期key来锁住当前key的访问,访问结束再删除该短期key。