前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis-事务和锁

Redis-事务和锁

作者头像
唔仄lo咚锵
发布2020-09-15 15:07:09
4810
发布2020-09-15 15:07:09
举报

文章目录

  • 事务
    • 命令
    • 异常
      • 编译异常
      • 运行异常
    • 命令
    • 示例

事务


Redis事务可以一次执行多个命令,事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。 事务特性ACID原子性、一致性、隔离性和持久性中,Redis单条命令满足原子性,但Redis事务不满足原子性!运行异常那有举例。 Redis事务本质是一组命令的集合,把命令序列化后按顺序执行,此外Redis没有分隔离级别,故没有幻读脏读等。 Redis事务过程:

  • 开启事务(multi)
  • 命令入队(详细命令)
  • 执行事务(exec)

命令

命令

作用

示例

multi

标记一个事务块的开始。 随后的指令将在执行EXEC时作为一个原子执行。

exec

执行事务,当使用WATCH 时,只有当被监视的键没有被修改,且允许检查设定机制时,EXEC会被执行

discard

放弃事务,已入队命令不执行。如果已使用WATCH,DISCARD将释放所有被WATCH的key。

在这里插入图片描述
在这里插入图片描述

异常


编译异常

编译异常即命令有错,不能通过编译,此时事务中的所有命令都不会执行。 比如:

在这里插入图片描述
在这里插入图片描述

运行异常

运行异常即执行命令时错误(比如处理了错误类型的键:list命令用在string键上等),执行错误命令时抛出异常,但其他命令正常执行。即不满足原子性(一起成功一起失败) 比如:

在这里插入图片描述
在这里插入图片描述


悲观锁:认为什么时候都会出错(悲观),所以无论做什么都会加锁。 乐观锁:认为什么时候都不会出错(乐观),所以不会加锁,更新数据时判断(check-and-set检查设定机制)。

命令

Redis提供了命令来支持乐观锁:

命令

作用

watch key [key …]

标记所有指定的key被监视(加锁)起来,在事务中有条件的执行(乐观锁)

unwatch key [key …]

取消监视,如果执行EXEC 或者DISCARD, 则不需要手动执行UNWATCH 。

示例

  1. 从卡1转100到卡2,监视卡1卡2,事务正常执行(数据期间没有发生变动)
在这里插入图片描述
在这里插入图片描述
  1. 客户端1还是卡1转100到k2,监视k1,此时不输入exec执行
在这里插入图片描述
在这里插入图片描述

在客户端2修改k1的值,比如从卡1取500

在这里插入图片描述
在这里插入图片描述

然后回到客户端1输入exec执行事务

在这里插入图片描述
在这里插入图片描述

返回nil,事务执行失败。 那么怎么解决呢?只要重新watch即可获取最新数据,可以先unwatch放弃监视

在这里插入图片描述
在这里插入图片描述

这样一来就能实现乐观锁了,应用于转账、秒杀等等。

原创不易,请勿转载本不富裕的访问量雪上加霜 ) 博主首页:https://blog.csdn.net/qq_45034708

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-08-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 事务
    • 命令
      • 异常
        • 编译异常
        • 运行异常
      • 命令
        • 示例
        相关产品与服务
        文件存储
        文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档