Redis事物特点
Redis对事物是部分支持的,这一点在“全体连坐”和“冤头债主”中可以看出
Redis事物相关命令
- multi:开始一个事物,一个事物中可以有多个命令,每一个命令都将被序列化并放入到队列中,事物提交后将顺序执行这些命令,执行过程中不允许加塞。
- exec:提交事物,顺序执行事务中的所有命令
- discard:取消事物
- watch:监控一个或多个key,若事物执行之前这个(或这些)key被其他命令所改动,那么事物将被打断,整个事物队列都不会被执行
- unwatch:取消监控
特点:
正常执行
即正常事物,事物以multi开始,以exec结束,中间没有任何错误
取消执行
使用discard取消事物
全体连坐
- 当事物中有一个命令出现错误时,整个事物中的所有命令都将执行失败。
- 特点是输入指令的过程中就出现了错误,就像Java中的语法错误一样,编译时就知道它存在错误
冤头债主
- 事物中的某个命令出现错误时只有该命令不能运行,不会影响事物中的其他命令
- 这就像Java中除零错误一样,只有在运行时才发现错误
悲观锁/乐观锁/
悲观锁
- 顾名思义:悲观锁就是很悲观的,他认为在对数据进行修改的过程中肯定会被别人修改,因此在每次拿数据时都会上锁,这样别人拿数据时只能等待解锁。
- 并发性低、安全性高
乐观锁
- 乐观锁认为每次拿数据时,被人都不会对数据进行修改,所以不会上锁。但是他会在每条数据上加上一个版本,每次修改都会另版本号加1,只有提交版本大于当前版本才允许提交
watch
- 监控一个或多个key,若事物执行之前这个(或这些)key被其他命令所改动,那么事物将被打断
- unwatch和exec命令都会取消之前的所有监控