1.redis管道pipeline解决的问题:
由于redis通信是通过tcp协议基础,并且是堵塞的处理方式,在第一个请求没有执行并返回前,无法处理第二个请求。所以事件浪费在了网络传输和堵塞请求中。
2.redis管道作用:
把多个redis的操作放在一起,然后一次发送到服务端,等这些请求执行完后,再一起发送给客户端。从而增加redis的操作效率。
3.python中redis管道的使用
import redis import time from concurrent.futures import ProcessPoolExecutor r = redis.Redis(host='127.0.0.1', port=6379, db=1) def try_pipeline(): start = time.time() # 把redis操作放到管道中 with r.pipeline(transaction=False) as p: # 管道添加操作 p.sadd('seta', 1).sadd('seta', 2).srem('seta', 2).lpush('lista', 1).lrange('lista', 0, -1) # 管道执行 p.execute() print(time.time() - start) def without_pipeline(): start = time.time() r.sadd('seta', 1) r.sadd('seta', 2) r.srem('seta', 2) r.lpush('lista', 1) r.lrange('lista', 0, -1) print(time.time() - start) if __name__ == '__main__': # 把请求放到进程中并发执行 with ProcessPoolExecutor(max_workers=12) as pool: for _ in range(10): pool.submit(try_pipeline) pool.submit(without_pipeline)
Notice:
1.如果redis服务端和客户端放在同一个机器上,不需要使用管道技术
相关连接:
https://www.cnblogs.com/kangoroo/p/7647052.html