Redis事务
来源:互联网 发布:php forreach 编辑:程序博客网 时间:2024/06/06 00:55
什么是Redis事务
Redis事务就是一次可以执行多个命令,本质是一系列命令的集合,一个事务中,所有命令都会序列化,按顺序地串行化执行而不会被其他命令插入,不许加塞。
能做什么
一个队列中,一次性的,顺序的,排他性的执行一系列命令。
怎么使用Redis事务
- 常用命令
DISCARD //取消事务,放弃执行事务块内的所有命令EXEC //执行事务块内的所有命令MULTI //标记一个事务块的开始UNWATCH //取消WATCH命令对所有key的监视WATCH key [key....] //监视一个(或多个)key,如果事务执行之前,这个key被其他命令改动,那么将会打断该事务
- 正常执行
->MULTI->set k1 v1->set k2 v2->set k3 v3->get k2->EXEC
放弃事务
当中途不想执行命令时,使用DISCARD命令,放弃事务执行。
->MULTI->set k1 v1->set k2 v2->set k3 v3->get k2->DISCARD
全体连坐
当一条命令加入队列失败的时候,所有命令都无法正常执行。该事务无效。
冤头债主
当一条命令加入队列成功,但是执行失败的时候,只有错误执行的那条命令失败,其他的正常执行。watch监控
1.乐观锁、悲观锁、CAS(check and set)
2.案例,信用卡余额和欠款
2.1无加塞更新余额和欠款
2.2有加塞更新余额和欠款
3.unwatch
4.执行exec后,watch加的监控锁就会取消
5.总结:watch指令,类似乐观锁,事务提交时,如果key的值已经被别的客户端改变,比如list已经被pop/push过了,整个事务队列就不会执行;如果whtch监控了多个key,如果在事务执行过程中有key被修改过,exec的时候会报错,整个事务执行失败。Redis事务的三个阶段
- 开启:multi命令开启事务。
- 入队:将多个命令加入到事务队列中,但是不会立即执行,等到exec命令时开始依次执行。
- 执行:由exec命令触发事务
Redis事务的三个特性
- 单独的隔离操作:事务中所有命令都会序列化,按顺序执行,事务在执行过程中,不会被其他客户端发来的命令请求打断。
- 没有隔离级别的概念:队列中的所有命令没有提交之前都不会被执行,因为事务提交前,任何命令都不会被实际执行,也就不存在“事务内的查询要看到事务内的更新,在事务外不能看到”这种问题。
- 不保证原子性:Redis事务中,如果有一条命令执行失败(冤头债主),其他命令会继续执行,不存在回滚操作。
阅读全文
0 0
- Redis 事务
- redis事务
- Redis 事务
- redis--事务
- redis事务
- redis事务
- Redis事务
- redis 事务
- Redis事务
- Redis事务
- Redis 事务
- Redis 事务
- redis事务
- Redis 事务
- Redis 事务
- redis 事务
- redis事务
- Redis 事务
- 期望(一)—— 预备知识
- Scala实现Kafka的producer
- 哈夫曼编码
- 手机号码归属地查询
- linux ubuntu14 更改为root用户登录
- Redis事务
- Android中动画的使用总结
- 乱码问题
- hdu 6240
- Delphi中GDI+和ImageList使用的正确姿势
- 在mysql中,多个CSV文件导入到一个表的方法
- 14个你可能不知道的JavaScript调试技巧
- 手把手教你webpack3(3)入口(多入口)entry
- 前端学习心得-javascript设计模式与开发实践-命令封装模式