七天玩转Redis | Day4、Redis事务操作

youmo_wy 2022-01-24 23:36:09

内容来源:https://huixiaoyuan.blog.csdn.net/article/details/122523003

事务:把多条语句放在一起执行

 

在MySQL中事务有四大特性,分别是:原子性、一致性、隔离性、持久性,简称是ACID特性,

Redis中的事务具有的特点是:一次性、顺序性、排他性。

事务的执行流程:开始事务(MULTI) -> 命令入队 -> 提交事务(EXEC) -> 执行结束(事务自动销毁)

Redis的单条命令具有原子性(也就是要么成功,要么失败)多条命令的Redis事务来说,不具备原子性

正常执行事务

1.开启事务

开启事务命令

-- MULTI

2.命令入队

(ps:在将命令添加到队列之后,命令并不会立即执行,而是返回一个QUEUED,表示入队成功!)

3.提交命令

提交事务

-- EXEC

取消事务执行

取消事务

-- DISCARD

事务编译时异常

如果我们的命令在书写上就存在明显代码错误,那么就会发生编译时异常,这个时候会有错误提示,但是事务仍能提交,但是提交之后,整个事务队列中的命令都不会执行 

运行时异常

在Redis中如果事务中的命令存在运行时异常,那么在提交事务之后,不存在异常的命令同样会被执行,异常的命令会单独执行失败!

Redis乐观锁实现

  • 悲观锁:认为什么时候都可能出错,所以在任何时候都会加锁
  • 乐观锁:认为什么时候都不会出错,所以什么时候都不会加锁,在更新数据的时候只需要去判断,在此期间是否有人修改过这个数据即可!

去监控我们要操作的字段的命令

-- WATCH key    key要监控的字段的索引

 在给字段添加监控的情况下通过事务去操作字段,如果在未提交时,有新的命令修改了字段值,那么事务一定会提交失败,但是在未监控的情况下,事务仍能提交成功!这就是Redis的乐观锁实现!

所以在实现乐观锁时,开启事务之前,一定要先给字段增加监控!

所以:Redis是可以实现乐观锁的!(面试的时候可是经常会问的!)

另外注意:Redis在每次事务提交之后,无论事务执行成功与否,该事务都会关闭,监控也会自动取消,在下次执行事务时都需要重新开启!
————————————————
版权声明:本文为CSDN博主「灰小猿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44985880/article/details/122523003

...全文
59 1 打赏 收藏 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-大数据 发布问题, 以便更快地解决您的疑问

151

社区成员

发帖
与我相关
我的任务
社区描述
开源数据库
其他 其他
社区管理员
  • 数据库小助手
  • 灰小猿
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧