python和redis之间的交互
一. redis模块
安装模块:
pip3 install redis
连接方式:
r = redis.Redis(host=‘localhost‘,port=6379)
连接池:为了节约资源,减少多次连接带来的消耗。
pool=redis.ConnectionPool(host=‘localhost‘,port=6379,decode_responses=True)
二.redis操作
常规操作:
import redis
r = redis.Redis(host=‘localhost‘,port=6379)
r.set(‘foo‘,‘bar‘)
print(r.get(‘foo‘))
连接池:
import redis
pool = redis.ConnectionPool(host=‘localhost‘,port=6379,decode_responses=True)
# 默认设置的值和取得的值都是bytes类型,如果想改为str类型,可以添加decode_responses=True
r1 = redis.Redis(connection_pool=pool)
r2 = redis.Redis(connection_pool=pool)
r1.set(‘name‘,‘jack‘)
print(r1.get(‘name‘))
r2.set(‘age‘,18)
print(r2.get(‘age‘))
print(r1.client_list())
print(r2.client_list())
管道:
import redis,time
r = redis.Redis(host=‘localhost‘,port=6379,decode_responses=True)
pipe = r.pipeline(transaction=True)
pipe.set(‘name1‘,‘Alin‘)
pipe.set(‘name2‘,‘Lnda‘)
pipe.set(‘name3‘,‘Tony‘)
time.sleep(5)
pipe.execute()
print(r.mget(‘name1‘,‘name2‘,‘name3‘))
事务:python可以使用管道来代替事务
import redis,time
import redis.exceptions
r = redis.Redis(host=‘localhost‘,port=6379,decode_responses=True)
pipe = r.pipeline()
print(r.get(‘name1‘))
try:
pipe.multi()
pipe.set(‘age1‘,22)
pipe.set(‘age2‘,23)
pipe.set(‘age3‘,24)
time.sleep(5)
pipe.execute()
print(r.mget(‘age1‘,‘age2‘,‘age3‘))
except redis.exceptions.WatchError as e:
print(‘Error‘)
订阅和发布:
发布方:
import redis
r = redis.Redis(host=‘localhost‘,port=6379,decode_responses=True)
while True:
msg = input(‘echo>>:‘)
if len(msg) == 0:
continue
elif msg == ‘quit‘:
r.publish(‘cctv1‘,msg)
break
else:
r.publish(‘cctv1‘,msg)
订阅方:
import redis
r = redis.Redis(host=‘localhost‘,port=6379,decode_responses=True)
chan = r.pubsub() #返回一个发布订阅对象
msg_reciver = chan.subscribe(‘cctv1‘) #订阅
msg = chan.parse_response() # 返回一个确认
print(msg)
print(‘订阅成功,开始接收...‘)
while True:
msg = chan.parse_response() #接收消息
if msg[2] == ‘quit‘: #格式:类型,频道,消息
break
else:
print(‘>>:‘, msg[2])
原文地址:http://blog.51cto.com/dianel/2146107
时间: 2024-10-10 21:03:52