Redis系列第4篇事务和锁
基本介绍
Redis事务时一个单独的隔离操作,事务中的所有命令都会序列化、按顺序执行。事务在执行的过程中,不会被其他客户端发来的命令请求锁打断。事务的主要作用时串联多个命令防止命令插队
基本操作
从输入multi命令开始,输入的命令都会依次进入队列,但不会执行。直到输入exec后,redis会将之前的命令队列中的命令依次执行,组队过程中可以通过discard放弃组队
1.组队成功,提交成功
如果输入redis-cli无效,需要将redis目录加到系统环境变量中
watch/unwatch
1.在执行multi之前,先执行 watch key1 [key2],可以监听一个(或多个)key。如果在事务执行之前这个key被其他命令锁改动,那么事务将被打断。
2.取消watch命令对所有key的监视。如果在执行watch命令之后,exec命令或者discard命令先被执行,那么就不需要再执行unwatch
锁机制
1.悲观锁是每次去拿数据的时候都认为其他线程会修改,所以每次拿到数据后都会上锁,这样其他线程想要拿到这个数据就会被block直到成功拿到锁
2.乐观锁是每次去哪数据的时候都认为其他线程不会修改,所以不会上锁,但是再更新的时候会判断一下在此期间有没有其他线程去更新这个数据,可以使用版本号等机制
3.乐观锁适用于多读的场景,可以提供吞吐量,Redis采用的就是乐观锁
Mybatis事务特性
1.单独的隔离操作,事务中的所有命令都会序列号,按顺序执行。事务在执行的过程中,不会被其他客户端发来的命令请求所打断
2.没有隔离级别概念,队列中的命令没有提交之前都不会实际被执行,因为事务提交之前任何命令都不会吧实际执行
3.不保证原子性事务中如果有一条命令失败,其后的命令仍然会被执行,没回滚
Redis系列第4篇事务和锁
https://www.eldpepar.com/coding/36720/