Redis for python API

 

目录
  • Redis for python API
    • 一、单实例
    • 二、主从环境(哨兵)
    • 三、集群环境

 

我叫张贺,贪财好色。一名合格的LINUX运维工程师,专一于LINUX的学习和研究,曾负责某中型企业的网站运维工做,爱好佛学和跑步。node

Redis for python API

咱们使用Redis一方面是为了缓存,另外一个方面仍是让开发人员使用,这一小节咱们就演示一下用当下最火的语言python链接redis,其它的语言思路都与此相似。python

不一样的redis架构链接方法不同,咱们最经常使用的redis架构有三种:单实例、主从、集群。这次演示基于已经搭建好的环境,也就是前几回博文搭建的环境,具体的搭建过程再也不多说,直奔主题。git

redis和python是两套不相干的软件,想要联动起来的话必需要经过特殊的中间件,这种中间件相似于驱动程序,这种驱动程序在python官网和redis官网均可如下载的到。github

redis官网:www.redis.io www.redis.cnredis

咱们在使用python与redis联动时,最好使用python比较新的版本,3.0以上,就不要再用2.0的版本了,2.0的版本对redis集群的支持并不太好,在centos上安装python3也至关的简单,配置好epel源或是阿里云的源以后直接yum install python3便可安装python3,经过python3 --version便可查看版本,以下所示:sql

[root@redis ~]# yum -y install python3
[root@redis ~]# python3 --version
Python 3.6.8

一、单实例

第一步:下载python链接单实例时用到的驱动软件vim

第二步:上传解压以后便可安装centos

//redis实例的配置文件
[root@redis ~]# vim /nosql/6379/redis.conf 
    daemonize yes
    port 6379
    logfile /nosql/6379/redis.log
    dir /nosql/6379
    dbfilename dump.rdb

    bind 127.0.0.1 192.168.80.24
    requirepass cba-123

    save 900 1
    save 300 10
    save 60 10000
    
//启动
[root@redis ~]# redis-server /nosql/6379/redis.conf
[root@redis ~]# unzip redis-py-master.zip 
[root@redis ~]# cd redis-py-master
[root@redis redis-py-master]# ls
benchmarks   docs     MANIFEST.in  RELEASE    tests
build_tools  INSTALL  README.rst   setup.cfg  tox.ini
CHANGES      LICENSE  redis        setup.py   vagrant

//导入redis到python3
[root@redis redis-py-master]# python3 setup.py install  
[root@redis redis-py-master]# python3

//在python3当中加载redis
>>> import redis

//输入主机、端口、密码链接本地的redis,0是指redis的默认0号库
>>> r = redis.StrictRedis(host='localhost',port=6379,db=0,password='abc-123')

//经过python向redis传递一个键值
>>> r.set('foo','bar')
True

//经过python查看传递的键值,成功查看说明联动成功
>>> r.get('foo')
b'bar'

二、主从环境(哨兵)

主从环境用到的驱动与单实例环境用到的驱动是同样的,都是用 redis-py-master.zip,若是上面你已经导入过了,这里就不用再导入一次了,直接就能够使用了。缓存

当前有三个实例,一主两从,以下:架构

redis-server /nosql/6380/redis.conf
redis-server /nosql/6381/redis.conf
redis-server /nosql/6382/redis.conf
redis-server /nosql/26380/sentinel.conf &

//这是哨兵
[root@redis ~]# redis-cli -p 26380

//6382为主
127.0.0.1:6382> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6381,state=online,offset=2488245,lag=0
slave1:ip=127.0.0.1,port=6380,state=online,offset=2488112,lag=0

//6380为从
[root@redis ~]# redis-cli -p 6380
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6382
master_link_status:up

//6381为从
[root@redis ~]# redis-cli -p 6381
127.0.0.1:6381> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6382
master_link_status:up

这四台个实例的配置方法在前面的博文当中有详细的阐述,这里就直接使用了。

[root@redis ~]# python3

//导入redis sentinel包
>>> from redis.sentinel import Sentinel

//指定sentinel的地址和端口号
>>> sentinel = Sentinel([('localhost',26380)],socket_timeout=0.1)

//测试,获取主从的IP
>>> sentinel.discover_master('mymaster')
('127.0.0.1', 6382)
>>> sentinel.discover_slaves('mymaster')
[('127.0.0.1', 6381), ('127.0.0.1', 6380)]

//定义写节点,mymaster指的是名字,在配置文件当中有定义
>>> master = sentinel.master_for('mymaster', socket_timeout=0.1)  

//定义读节点
>>> slave = sentinel.slave_for('mymaster', socket_timeout=0.1) 

//传递一个键值
master.set('oldboy', '123')  
True

//成功获取到
slave.get('oldboy')  
b'123'

三、集群环境

pyhon若是想和集群环境下的的redis联动的话,须要加载一个新的驱动,环境一样基于前面博文所搭建的环境。

//下载一个新的驱动&安装
wget https://github.com/Grokzen/redis-py-cluster/archive/1.3.6.tar.gz
tar xf 1.3.6.tar.gz 
cd redis-py-cluster-1.3.6
python3 setup.py install
[root@redis ~]# python3

//加载集群驱动
>>> from rediscluster import StrictRedisCluster  

//链接redis集群
>>> startup_nodes = [{"host": "127.0.0.1", "port": "7000"}]  
### 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  
>>> rc.get('foo')
'bar'