本文共 2140 字,大约阅读时间需要 7 分钟。
参考
以下例子在电脑上运行过,但是没有效果,暂时没有找到原因
管道:
redis-py默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作,如果想要在一次请求中指定多个命令,则可以使用pipline实现一次请求指定多个命令,并且默认情况下一次pipline 是原子性操作。
示例1
import redis pool = redis.ConnectionPool(host='10.211.55.4', port=6379) r = redis.Redis(connection_pool=pool) # pipe = r.pipeline(transaction=False)pipe = r.pipeline(transaction=True)pipe.multi()pipe.set('name', 'alex')pipe.set('role', 'sb') pipe.execute()
示例2
import redisconn = redis.Redis(host='192.168.1.41',port=6379)conn.set('count',1000)with conn.pipeline() as pipe: # 先监视,自己的值没有被修改过 conn.watch('count') # 事务开始 pipe.multi() old_count = conn.get('count') count = int(old_count) if count > 0: # 有库存 pipe.set('count', count - 1) # 执行,把所有命令一次性推送过去 pipe.execute()
import redisclass RedisHelper: def __init__(self): self.__conn = redis.Redis(host='10.211.55.4') self.chan_sub = 'fm104.5' self.chan_pub = 'fm104.5' def public(self, msg): self.__conn.publish(self.chan_pub, msg) return True def subscribe(self): pub = self.__conn.pubsub() pub.subscribe(self.chan_sub) pub.parse_response() return pub
consumer.py
from monitor_redis import RedisHelper obj = RedisHelper()redis_sub = obj.subscribe() while True: msg= redis_sub.parse_response() print (msg)
producer.py
from monitor_redis import RedisHelper obj = RedisHelper()obj.public('hello')
sentinel
redis重的sentinel主要用于在redis主从复制中,如果master顾上,则自动将slave替换成master
from redis.sentinel import Sentinel # 连接哨兵服务器(主机名也可以用域名)sentinel = Sentinel([('10.211.55.20', 26379), ('10.211.55.20', 26380), ], socket_timeout=0.5) # # 获取主服务器地址# master = sentinel.discover_master('mymaster')# print(master)## # # 获取从服务器地址# slave = sentinel.discover_slaves('mymaster')# print(slave)### # # 获取主服务器进行写入# master = sentinel.master_for('mymaster')# master.set('foo', 'bar') # # # # 获取从服务器进行读取(默认是round-roubin)# slave = sentinel.slave_for('mymaster', password='redis_auth_pass')# r_ret = slave.get('foo')# print(r_ret)
转载地址:http://gxfff.baihongyu.com/