在面试的时候,通常会被问到redis是如何实现分布式锁的。如果我们只知道是借助于setnx/setex ,而不了解setnx/setex底层如何实现,那基本上是无法过关的,尤其是大厂。那究竟redis是怎么实现事务的呢?
1、redis事务的用法
redis支持事务操作。它的实现依赖于multi 和exec 关键字。其中,multi表示事务开启,exec表示执行multi到exec之间的语句块。系统检测multi 语句后,会将其后的命令添加到命令队列中去,直到遇到exec时,才一并执行,不会被中断。具体使用如图所示:
![e0f2b0f95a78aafe90738c43ec312e72.png](https://i-blog.csdnimg.cn/blog_migrate/b63b984fdf6b14aeb4628f9c4b94998d.jpeg)
1、redis 事务的过程
注意: 在multi开启的事务中,如果其它线程也修改了该key的值,那么,multi事务依旧会被执行,且multi中设定的该key的值会覆盖掉其它线程设定的值。如下图所示:
![9ac07f198bb25bce8483996856b0f211.png](https://i-blog.csdnimg.cn/blog_migrate/4e91b83cbfffb58abada64275c9b1d18.jpeg)
图2 其他线程修改事务中的key,不会对事务造成影响