Redis事务
Redis单条命令是保证原子性的,Redis的事务是没有原子性的
Redis事务本质:一组命令的集合,一个事务中的所有命令都会被序列化,在事务执行过程中,会按照顺序执行
一次性,顺序性,排他性!执行一系列的命令
Redis事务没有隔离级别的概念
所有的命令在事务中,并没有被直接被执行,只有发起执行命令的时候才会被执行!Exec
redis的事务
-
开启事务(multi)
-
-
执行事务(exec)
锁:redis可以实现乐观锁,watch(这是一个监视器的东西)
我们来实践一下:




悲观锁和乐观锁
悲观锁:
乐观锁:
-
很乐观,认为什么时候都不会出现问题,所以不会加锁!更新数据的时候去判断一下,在此期间是否有人修改过这个数据
-
获取version
-
更新的时候比较version

现在我们再开一个线程连接,在这个新的连接里去watch 这个money,然后去开始一个事务,但是先不执行这个事务

这个时候在这个新的连接里这个事务还没有执行的情况下,我们在之前的那个连接里突然去改变这个money的值

最后我们再去完成这个事务就会提示,事务无法正常执行

因此需要监控多线程修改值的时候,就可以使用这个watch来当作redis的乐观锁操作。就可以把watch看作同步锁一样
综上我们可以看到money已经发生变化了,也就是说之前watch拿到的money的值已经发生改变了,我们需要去重新定
义一下这个watch,重新去拿到这个money的值

一般秒杀的时候用的就是乐观锁,这个面试常问的。

浙公网安备 33010602011771号