管道(pipeline)

默认情况下,每一次操作redis,都会有一个 连接和断开的操作

如果想在连接和断开之间,执行多个操作,则可以使用pipeline.

除了上面节省 连接和断开的开销外,pipeline 还具备原子性操作。

原子性: 一个事务是一个不可分割的最小工作单位,要么都成功 要么都失败

import redis
import time

pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
r = redis.Redis(connection_pool=pool)


# 默认的情况下,管道里执行的命令可以保证执行的原子性
# pipe = r.pipeline(transaction=False) 可以禁用这一特性。
# pipe = r.pipeline(transaction=True)  默认情况

pipe = r.pipeline() # 创建一个管道

pipe.set('name', 'jack')
pipe.set('role', 'sb')
pipe.sadd('faz', 'baz')
pipe.incr('num')    # 如果num不存在则vaule为1,如果存在,则value自增1
pipe.execute()

print(r.get("name"))
print(r.get("role"))
print(r.get("num"))

上面的操作,还可以连着写

pipe.set('hello', 'redis').sadd('faz', 'baz').incr('num').execute()
print(r.get("name"))
print(r.get("role"))
print(r.get("num"))