Redis 中的事务+锁
来源:互联网 发布:汉译英好用的翻译软件 编辑:程序博客网 时间:2024/05/21 18:43
Redis 中的事务
Mysql与redis的区别
Mysql Redis开启 start transaction muitl语句 普通sql 普通命令失败 rollback 回滚 discard 取消成功 commit exec
127.0.0.1:6379> set num1 200OK127.0.0.1:6379> set num2 400OK127.0.0.1:6379> multiOK127.0.0.1:6379> decrby num2 100--将语句保存在队列queued中,不执行,只有exec才从队列中拿出来执行QUEUED127.0.0.1:6379> incrby num1 100QUEUED127.0.0.1:6379> exec1) (integer) 3002) (integer) 300
注意:
1 rollback与discard 的区别
如果已经成功执行了1条语句, 第2条语句出错.
Rollback后,前1条的语句影响消失,
Discard只是结束本次事务,前1条语句造成的影响仍然还在
127.0.0.1:6379> set num1 200OK127.0.0.1:6379> set num2 400OK127.0.0.1:6379> multiOK127.0.0.1:6379> incrby num1 100QUEUED127.0.0.1:6379> decrby num2 aaQUEUED127.0.0.1:6379> exec1) (integer) 3002) (error) ERR value is not an integer or out of range127.0.0.1:6379> get num1"300"127.0.0.1:6379> get num2"400"127.0.0.1:6379>
2 在mutil后面的语句中, 语句出错可能有2种情况
1: 语法就有问题,
执行exec时,报错, 所有语句得不到执行
127.0.0.1:6379> set num1 200OK127.0.0.1:6379> set num2 400OK127.0.0.1:6379> multiOK127.0.0.1:6379> incrby num1 100QUEUED127.0.0.1:6379> asdad(error) ERR unknown command 'asdad'127.0.0.1:6379> exec(error) EXECABORT Transaction discarded because of previous errors.127.0.0.1:6379> get num1"200"127.0.0.1:6379> get num2"400"
2: 语法本身没错,但适用对象有问题. 比如set num2 40;decrby num2 aa
Exec之后,会执行正确的语句,并跳过有不适当的语句.
127.0.0.1:6379> set num1 200OK127.0.0.1:6379> set num2 400OK127.0.0.1:6379> multiOK127.0.0.1:6379> incrby num1 100QUEUED127.0.0.1:6379> decrby num2 aaQUEUED127.0.0.1:6379> exec1) (integer) 3002) (error) ERR value is not an integer or out of range127.0.0.1:6379> get num1"300"127.0.0.1:6379> get num2"400"127.0.0.1:6379>
锁
Redis的事务中,启用的是乐观锁,只负责监测key没有被改动.有改动,执行的事务就不成功。
语法
watch key1 key2 …
案列买票
--当前票数为1127.0.0.1:6379> set ticket 1OK--用户A的钱500127.0.0.1:6379> set money 500OK--设置锁,如果票数发生变化,下面的事务不执行127.0.0.1:6379> watch ticketOK127.0.0.1:6379> multiOK127.0.0.1:6379> decr ticketQUEUED127.0.0.1:6379> decrby money 100QUEUED--在exec之前,另一个用户B购买了票数,之后当前用户A执行exec127.0.0.1:6379> exec(nil)--表示用户A的事务没有生效
另一个用户B,在用户A exec之前,先买了票
127.0.0.1:6379> decr ticket(integer) 0127.0.0.1:6379>
阅读全文
0 0
- Redis 中的事务+锁
- Redis 中的事务
- redis中的事务
- Redis中的事务
- Redis中的事务
- redis中的事务
- redis事务中的WATCH
- Redis 中的事务
- redis中的事务
- Redis中的事务
- Redis 中的事务
- Redis 中的事务
- Redis中的事务
- redis中的事务
- Redis中的事务
- redis--事务--锁
- 辛星浅谈Redis中的事务
- redis事务及事务乐观锁
- Android之常用开发框架
- 【机器学习】coursera学习笔记(二) 线性代数相关知识
- Linux下core文件调试方法
- Eclipse使用过程的一些配置、错误等的总结记录
- JAVA中request.getParameterMap()用法笔记
- Redis 中的事务+锁
- input 下拉框 与tab 结合的选择
- Unity Resource文件夹的使用
- 笑谈java并发编程七之ExecutorService
- SEO--nofollow标签
- 职责链模式(Chain of Responsibility)(对象行为型)
- 《Effective Modern C++》读书笔记(3) -- 明白decltype(understand decltype)
- C#语法(List、方法的调用)
- android 模拟点击按键功能(android 4.4)