Redis学习笔记三:redis事物及锁的应用
来源:互联网 发布:单页面网站seo 编辑:程序博客网 时间:2024/06/02 05:33
Redis和MySQL一样,也支持简单的事物,并且redis还可以对key进行加锁,防止同时对某一key操作而导致数据错误
一、 Redis与MySQL事物比较:
二、 redis事物模拟:
1、 正确执行的事物
127.0.0.1:6379> set ticket 10 #设置初始值OK 127.0.0.1:6379> set money 500 #设置初始值OK127.0.0.1:6379> multi #事物开始OK127.0.0.1:6379> decr ticket #命令操作,ticket减1QUEUED # 加入队列 127.0.0.1:6379> decrby money 100 #命令操作,money减100QUEUED # 加入队列127.0.0.1:6379> exec # 执行事物,保证原子性1) (integer) 92) (integer) 400
2、 事物执行过程中,若语句出现语法错误,则事物操作失败
127.0.0.1:6379> mget ticket money1) "9"2) "400"127.0.0.1:6379> multi OK127.0.0.1:6379> decr ticketQUEUED127.0.0.1:6379> wrong-conmmand # 错误的命令 (error) ERR unknown command 'wrong-conmmand'127.0.0.1:6379> decrby money 100QUEUED127.0.0.1:6379> exec(error) EXECABORT Transaction discarded because of previous errors. # 事物取消127.0.0.1:6379> mget ticket money1) "9" # 结果不变2) "400"
3、如果事物中的语句没有语法错误,但是有不适当的语句,比如与事物不相关的语句,exec之后,会执行正确的语句,并跳过有不适当的语句.
127.0.0.1:6379> multiOK127.0.0.1:6379> decr ticketQUEUED127.0.0.1:6379> lpush tmp_list 123 # 语法没有错QUEUED # 正常加入队列127.0.0.1:6379> exec 1) (integer) 82) (integer) 1127.0.0.1:6379> mget ticket money1) "8" # 执行后对原有结果有影响2) "400"
三、Redis的事物锁机制
当Redis事物语句中操作了一个key的值,在exec之前,如果有其他原因导致该key的值改变就会引起数据不同步或其他错误(如秒杀导致商品数量为负数),对于这种问题,Redis提供了锁机制(watch),Redis事物中启用的是乐观锁,只负责检测key的值有没有被改动
redis 127.0.0.1:6379> watch ticket # 对ticket进行监控OKredis 127.0.0.1:6379> multiOKredis 127.0.0.1:6379> decr ticketQUEUEDredis 127.0.0.1:6379> decrby money 100QUEUEDredis 127.0.0.1:6379> exec # 执行前我们启动了另一个终端,并且改变了ticket的值(nil) # 返回nil,说明监视的ticket已经改变了,事务就取消了.
阅读全文
0 0
- Redis学习笔记三:redis事物及锁的应用
- Redis学习笔记三:redis事物及锁的应用
- Redis 学习笔记4-事物
- redis学习笔记(三)
- Redis 学习笔记三
- redis学习笔记三
- Redis学习笔记之一---- Redis的三种启动方式
- Redis的快照持久化-Redis学习笔记三
- redis学习笔记六之事物、排序、队列及键值对生失效时间
- redis事物介绍与应用
- redis学习笔记(三)
- Redis学习笔记(三)
- Redis学习笔记(三)---对象
- redis学习笔记三(列表)
- redis学习笔记(三)
- Redis学习笔记(三)
- 【Redis 3】Redis数据库的学习与实践—Redis的常用命令及高级应用
- Redis笔记(三)Redis的数据类型
- LeeCode Median of Two Sorted Arrays
- Redis学习笔记一:redis简介及安装使用
- Android Gson转化集合
- Redis学习笔记二:Redis的常用操作命令
- CentOS下 安装与配置Ant (20170707)
- Redis学习笔记三:redis事物及锁的应用
- Go闭包函数
- Redis学习笔记四:redis的持久化
- Windows 某些软件显示"口口"解决办法
- HDU-2602
- HDU-1203
- opencv之深拷贝及浅拷贝,IplImage装换为Mat
- HDU 2102 A计划
- Redis学习笔记五:redis主从复制