以下代码来自 redis实战
一书中某个小节
代码是python实现,其中如果pipeline()不加任何参数,或者是pipeline(True)的形式,那么客户端将使用MULTI EXEC包裹起来用户要执行的所有命令. 我的问题是: 既然pipeline(True) 实际将 要被执行的代码用MULTI EXEC包括起来 那么下面代码先不考虑业务,pipeline执行的时候会用MULTI EXEC包裹那些代码?
//
// 释放所的操作
// conn: 连接
// lockname: 锁的名字
// identify: 锁的Value值(128位)
def release_lock(conn,lockname,identify):
pipe = conn.pipeline(True) //Pipeline 执行的时候用MULTI EXEC包含那些代码?
lockname = 'lock' + lockname
while True:
try:
pipe.watch(lockname)
if pipe.get(lockname) == identify:
pipe.multi()
pipe.delete(lockname)
pipe.execute()
return True
pipe.unwatch()
break
except redis.exceptions.WatchError:
pass
return False
pipeline(False) 含义是:客户端将向 事务那样把所有要执行的命令收集起来, 只是不会把这些命令用 MULTI EXEC 包裹起来. 那么上面的的pipeline 能写成 pipeline(False) 么,基于上面已经有写pipe.multi
同样迷惑中,楼主理解了吗