美文网首页
python_操作redis

python_操作redis

作者: 魔曦帝天 | 来源:发表于2019-11-27 19:37 被阅读0次

    安装redis-py

    pip3 install redis
    
    image

    python 操作 redis

    默认情况下,所有响应在Python 3中以字节返回(输出打印 type 为 bytes),在Python 2中以str返回。用户负责解码为Python 3字符串或Python 2 unicode对象

    image
    import redis
    #连接 redis
    #指定主机地址,port与服务器连接,redis默认数据库有16个,默认db是0
    r = redis.Redis(host='172.17.0.4',port=6380,db=0) #password='**'
    print(r.get('foo'))
    r.set('foo','[1,2,3]')
    print(r.get('foo'))
    print(r.keys())
    r.delete('foo')
    print(r.keys())
    
    
    image

    python 连接 redis 使用连接池

    redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池

    import redis
    
    pool = redis.ConnectionPool(host='172.17.0.4', port=6380)
    r = redis.Redis(connection_pool=pool)
    r.set('foo', 'Bar')
    print(r.get('foo'))
    
    

    python 连接 redis 主从服务器 sentinel 集群 (哨兵模式)

    image
    import redis
    from redis.sentinel import Sentinel
    
    #连接哨兵服务器(主机名也可以用域名)
    sentinel = Sentinel([('172.17.0.4',26379),('172.17.0.4',26380),('172.17.0.4',26381)],socket_timeout=0.5)
    
    # 获取主服务器地址
    master = sentinel.discover_master('mymaster')  # 设置的master名字
    print(master)
    
    # 获取从服务器地址
    slave = sentinel.discover_slaves('mymaster')
    print(slave)
    
    # 获取主服务器进行写入
    master = sentinel.master_for('mymaster', socket_timeout=0.5, db=0)
    print("主服务器插入前的name为:",master.get('name'))
    w_ret = master.set('name', 'shark')
    print("主服务器插入后的name为:", master.get('name'))
    
    # # 获取从服务器进行读取(默认是round-roubin)
    slave = sentinel.slave_for('mymaster', socket_timeout=0.5, db=0)
    r_ret = slave.get('name')
    print("从服务器的name为:", r_ret)
    
    
    image

    会出现如下报错

    image

    解决方案: 配置文件中写入

    bind 0.0.0.0
    daemonize no
    protected-mode no
    
    
    image

    解决方案: 配置文件中

    sentinel monitor mymaster 127.0.0.1 6380 2
    改成 
    sentinel monitor mymaster 172.17.0.4 6380 2
    
    

    python 操作 redis 集群

    启动集群
    redis-server /etc/redis/7001.conf 
    redis-server /etc/redis/7002.conf 
    redis-server /etc/redis/7003.conf 
    redis-server /etc/redis/7004.conf 
    redis-server /etc/redis/7005.conf
    redis-server /etc/redis/7006.conf 
    
    
    image image
    pip3 install redis-py-cluster
    
    

    redis-py-cluster 官方网站

    #python连接rediscluster集群测试
    from rediscluster import StrictRedisCluster 
    startup_nodes = [{"host": "172.17.0.3", "port": "7001"},
                     {"host": "172.17.0.3", "port": "7002"},
                     {"host": "172.17.0.3", "port": "7003"},
                     {"host": "172.17.0.3", "port": "7004"},
                     {"host": "172.17.0.3", "port": "7005"},
                     {"host": "172.17.0.3", "port": "7006"}  ]  
    # Note: 与python3一起使用时,decode_responses必须设置为True  
    m1 = StrictRedisCluster(startup_nodes=startup_nodes, decode_responses=True)  
    m1.set("name", "shark")  
    print("集群中的 name 为:",m1.get("name"))
    
    

    打印结果如下:

    image

    可能有报错如下

    image

    原因是 rediscluster 和 redis-py 版本不兼容
    建议使用以下版本

    image

    相关文章

      网友评论

          本文标题:python_操作redis

          本文链接:https://www.haomeiwen.com/subject/kytuwctx.html