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'
相關文章
相關標籤/搜索