Redis-server 会交叉执行多个客户端发来的命令或者说Redis 既然是单线程为什么还要 watch 命令?

我的理解是: Redis 既然是单线程,命令会从FIFO队列里面取出来一个接一个执行,不会存在资源竞争,为什么还需要 watch 命令呢?

期待的结果

  1. 给出自己的详尽理解;
  2. 给出一些参考资料.
阅读 3.8k
3 个回答

https://redis.io/docs/manual/transactions/ 这里有更清晰解释

如果redis server 只连接一个客户端那么是否就不要使用watch等之类的命令了?

>>> def notrans():
        print conn.incr('notrans:')
        time.sleep(.1) // 等待100ms 
        conn.incr('notrans:',-1)

>>> if 1:
        for i in xrange(3):
            threading.Thread(target=notrans).start()
        time.sleep(.5)

上面通过休眠100毫秒的方式来放大潜在的问题;这里我们使用一个客户端但也有可能出现问题

https://juejin.cn/post/6989109527886954527

Watch 是对某些key 做监听。在执行事务的时候,如果watch到key 和value 被修改,则事务不执行。

假设有两个客户端,A,B都需要执行某一事务(但事务仅希望执行一次),那就可以使用watch 来先监控相同的key。
如果A先于B操作完成,则B事务将不会再执行了。

事务是串行的,对于A,B两个客户端,操作一个key,A先于B更新了该key,则B再执行的时候会导致B的事务终结。
送个文档:https://www.jianshu.com/p/ad2...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题