zoukankan      html  css  js  c++  java
  • Redis for python API

    我叫张贺,贪财好色。一名合格的LINUX运维工程师,专注于LINUX的学习和研究,曾负责某中型企业的网站运维工作,爱好佛学和跑步。
    个人博客:传送阵
    笔者微信:zhanghe15069028807,非诚勿扰。

    Redis for python API

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

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

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

    redis官网:www.redis.io www.redis.cn

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

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

    1、单实例

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

    第二步:上传解压之后即可安装

    //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'
    

    2、主从环境(哨兵)

    主从环境用到的驱动与单实例环境用到的驱动是一样的,都是用 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'
    

    3、集群环境

    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'
    
  • 相关阅读:
    php 延迟静态绑定: static关键字
    python分片
    用逗号分隔数字,神奇
    ubuntu 屏幕截图
    js 获取随机数
    netty : NioEventLoopGroup 源码分析
    LinkedList 源码分析
    面向对象
    JS
    网页
  • 原文地址:https://www.cnblogs.com/yizhangheka/p/12165214.html
Copyright © 2011-2022 走看看