Redis事务

一、Redis事务

什么是事务
举一个烂大街的例子:银行转账。当我们要在银行进行转账的时候,它的操作可以分为两部分:一先扣除你账户的金额1000RMB,二把被转账人的账户金额加1000RMB。但是如果在把你的钱扣除了然后系统发生了故障(比如断电),并没有把被转账人的金额增加。这样你不就损失了1000,而银行赚了1000。这是就需要事务来控制。在转账开始前开启一个事务,结束后关闭事务。如果中间发生了错误那这个事务就认为是无效的。在错误在前作的事情需要在退回去(回滚)。
事务特性
事务具备四个特性:ACID

  1. 原子性(Automatic):事务是一个原子操作(做小的操作),事务要么做了要么没做。不能只完成一部分。
  2. 一致性(Consistency):事务完成前后数据完整性没有改变
  3. 隔离性(Isolation):一个事务在执行的过程中不应该受其他事务的干扰
  4. 持久性(Durability):事务一旦结束数据就要保存到磁盘上

Redis事务用法
multi # 开启事务,同MySQL的begin或start transaction
discard # 中断事务,同MySQLrollback
exec # 结束事务,同MySQLcommit

正常执行一个事务
在这里插入图片描述

中断一个事务,可以看到数据并未被修改
在这里插入图片描述

事务工作流程(截屏偷传智黑马班的-_-)
在这里插入图片描述
事务的锁

watch key [key]

对key添加监视锁,在执行exec前,监视的对象发生了变化则终止事务执行。

unwatch

取消所有监视对象。

在这里插入图片描述
对name进行监视
在执行exec操作之前先执行,在另一个客户端先执行下面的操作。会发现提交事务后返回nil,事务没有执行。查找aa返回nil。
在这里插入图片描述

上面的watch只能监视key的值有没有发生变化,不能解决多个客户端在秒杀的时候的并发问题。所以使用

setnx lock-key value # 对key加锁

在这里插入图片描述
如果多次设置锁,则不成功返回0.

上面设置的锁均需要手动释放。而如果一个客户端在拿到锁之后,发生了宕机之类的事件,我们就需要使用定时来设置锁了。
下面两条指令分别针对秒和毫秒级设置锁

expire lock-name second
pexpire lock-name millisecond

首先执行下面这张图片的客户端的操作,给name设置了一个锁,然后设定了一个期限10秒
在这里插入图片描述

然后执行下面图片客户端操作,可以看到一开始不成功,当10秒后,设置锁就成功了。
在这里插入图片描述

对于设置锁和设置期限,这是两个操作,我们必须让他们是原子操作,这样才能达到我们的目的。可以用脚本语言设置原子操作。

注:文章内容均是观看视频后自己写的笔记,部分图片是视频截图。原视频链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值