redis事务及锁应用

redis事务及锁应用
redis支持简单的事务
Redis与mysql事务的对比
 redismysql
开启multistart transaction
语句普通命令普通sql
失败Discard取消Rollback回滚
成功execCommit
注:rollback与discard的区别
如果已经成功执行了2条语句,第3条语句出错
Rollback后,前2条的语句影响消失。
Discard只是结束本次事务,前2条语句造成的影响仍然还在

注:
multi后面的语句都会放入一个队列中,exec后再执行;
在multi后面的语句中,语句出现错误可能有2种情况
1、语法有问题:
这种情况下exec时,所有的语句都得不到执行

2、语法本身没错,但是适用对象有问题,比如sadd操作link对象,
exec之后,会执行正确的语句,并且跳过有不适当的语句
(如果sadd操作link这种事应该怎么避免?这一点只能由程序员负责)

思考:
我正在买票
Ticket-1,money-100
而票只有1张,如果在我multi之后和exec之前,票被别人买了---- 即ticket=0
我该如何观察这种情况,并不在提交

悲观的想法:
世界充满危险,肯定有人和我抢,给ticket上锁,只有我能操作。(悲观锁)

乐观的想法:
没有那么多的人和我抢,因此,我只需要注意---没有人更改ticket的值就可以了(乐观锁)

Redis的事务中,启用的就是乐观锁,只负责检测可key有没有被修改。

Watch key1 key2....keyN
作用:监听key1 key2..... keyN有没有发生变化,如果有变,则事务取消(任意一个发生变化,事务都取消)
Unwatch
作用:取消所有watch监听


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值