当前位置: 首页 > wzjs >正文

红色的网站城乡建设网站宁德

红色的网站,城乡建设网站宁德,企业公示信息查询系统陕西,室内设计网站论坛Redis的事务 一.redis事务简介1.redis是否有原子性2.不具备一致性3.不具备持久性4.不涉及隔离性 二.redis事务的意义三.事务的命令1.开启事务(MULTI)2.执行事务(EXEC)3.放弃当前事务(DISCARD)4.WATCH监控某个key 四.WATCH实现原理 一.redis事务简介 1.redis是否有原子性 redi…

Redis的事务

  • 一.redis事务简介
    • 1.redis是否有原子性
    • 2.不具备一致性
    • 3.不具备持久性
    • 4.不涉及隔离性
  • 二.redis事务的意义
  • 三.事务的命令
    • 1.开启事务(MULTI)
    • 2.执行事务(EXEC)
    • 3.放弃当前事务(DISCARD)
    • 4.WATCH监控某个key
  • 四.WATCH实现原理

一.redis事务简介

1.redis是否有原子性

redis是否存在原子性这个仁者见仁智者见智,此处只是对其做一个简单的分析,redis的原子性和MySQL的原子性是不同的。

MySQL的原子性是把多个操作打包到一起,要么这些操作都执行成功,要么这些操作都不执行,如果执行过程中有事务操作执行失败了,事务就会进行回滚。

Redis的原子性只是将多个操作打包到一起,要么都一起执行,要么都不执行,不会管执行过程中是否成功。

这也就导致了,原子性的门槛被提高了,有些人说redis有原子性,有些人又说redis没有原子性,其实还是看大家如何理解原子性这个特点的,每个人理解的不同那么就会有不同的结论,其实都是对的(个人看法)

2.不具备一致性

redis没有约束,也没有回滚机制,事务执行过程中,如果某个修改操作出现失败,就可能引起不一致的情况。

3.不具备持久性

redis本身就是内存数据库,数据是存储在内存中的,虽然redis也有持久化操机制,但是这里的持久化机制和事务没有啥关联。

4.不涉及隔离性

redis是一个单线程模型的服务器程序,所有请求/事务都是串行执行的。

二.redis事务的意义

redis事务的主要意义就是用于打包,避免其他客户端的命令,插队查到中间。redis中实现事务,是引入了队列的,每个客户端都有一个队列。

开启事务的时候,此时客户端输入的命令,就会发给服务器并且进入这个队列中(而不是立即执行),当遇到执行事务的命令的时候,此时就会把队列中的这些任务按照顺序依次执行(在redis主线程中完成,主线程会把事务中的操作都执行完再处理其他客户端)。

三.事务的命令

1.开启事务(MULTI)

此时开启事务后,set key后的返回值不再是OK,而是QUEUED了,而且在其他redis客户端上,也查不到这几个创建的key。
在这里插入图片描述
在这里插入图片描述

2.执行事务(EXEC)

执行事务后,返回了三个OK,也就代表之前开启事务的命令都执行成功了,这三个OK是之前设置的三个key。
在这里插入图片描述
此时执行事务之后,在其他客户端上也可以看到这个数据。
在这里插入图片描述

3.放弃当前事务(DISCARD)

此时就将刚才提交的事务全部丢弃了:
在这里插入图片描述

当开启事务后,给服务器发送若干个命令,此时服务器进行重启操作,此时的事务就相当于被DISCARD了:
在这里插入图片描述

4.WATCH监控某个key

如果有两个客户端,当第一个客户端开启事务后,提交了代码,但是此时第一个客户端并没有执行事务,第二个客户端先将key设置成了其他值后,第一个客户端再执行事务,此时这个key的value值是为第一个客户端执行事务后的value值,因为第一个客户端执行事务的命令更晚。

在这里插入图片描述

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

此时上述的场景就可以使用WATCH命令来监控这个key,看看key在事务的MULTI、EXEC之间和set key之后,是否被其他外部的客户端修改了。

此时exec在执行上述事务的命令时,发现key在外部的客户端中进行了修改,于是真正执行set key3 123123123的时候并没有真正的执行。
在这里插入图片描述
在这里插入图片描述

如果需要取消监视key,可以通过unwatch来进行取消,unwatch直接取消所有的key的监视

四.WATCH实现原理

redis的watch相当于是基于版本号的机制来实现的乐观锁,本质上是给exec加了个判定条件。

当两个客户端存在时,此时对第一个客户端,进行了watch key的操作,当执行了watch key的操作时,就会给key安排一个版本号,这个版本号可以理解为一个"整数",每次在修改的时候版本号会变大(所谓的变大不一定是自增,有可能直接从1变成100)

当第一个客户端watch key(必须要使用MULTI开启事务)后,此时第二个客户端也插入一个key值,而只要是针对第一个客户端中相同的key做出修改,就会引起版本号的变大,此时key的版本号就不同了。

第一个客户端又紧接着对key的值进行了修改,在通过exec命令执行事务时,会判断此时key的版本号和最初watch的时候记录的版本号是否一致。

如果此时版本号一致,说明当前设置的key在事务开启时到最终执行这个过程中,没有别的客户端修改,于是才能真正进行设置,如果不一致,说明key在其他客户端中改过了,因此就直接丢弃事务中的操作,exec返回一个nil。


文章转载自:

http://39xKUIXQ.dhchL.cn
http://UU8ZzEQd.dhchL.cn
http://2GU682CL.dhchL.cn
http://NP7MldKz.dhchL.cn
http://iSHB0Ewc.dhchL.cn
http://TE4pbwiY.dhchL.cn
http://Su1MWUMJ.dhchL.cn
http://UGV6Uqtw.dhchL.cn
http://mw3Y8w59.dhchL.cn
http://yUUWBN0l.dhchL.cn
http://g8MsFR4i.dhchL.cn
http://zHhgxm3Y.dhchL.cn
http://b2Y4hK1h.dhchL.cn
http://LczHTwg4.dhchL.cn
http://lCHlY9do.dhchL.cn
http://KIr2bmsp.dhchL.cn
http://iQDHJgzL.dhchL.cn
http://jInvTVc9.dhchL.cn
http://XsdKKHfn.dhchL.cn
http://A8KPZ0DM.dhchL.cn
http://3p67BTpb.dhchL.cn
http://dY4LjBwg.dhchL.cn
http://eoYEcBzr.dhchL.cn
http://02M3Bzp1.dhchL.cn
http://oFSyxJcc.dhchL.cn
http://huPancWo.dhchL.cn
http://k0uS74zq.dhchL.cn
http://R3MLTqJL.dhchL.cn
http://cIQilzbm.dhchL.cn
http://Dou01iZ3.dhchL.cn
http://www.dtcms.com/wzjs/706511.html

相关文章:

  • 关于网站建设费用的报告网站如何优化
  • 网站备案期间 权重做一个购物网站要多少钱
  • 可以做同城活动的网站宠物店网站模板
  • 如何建设彩票私人网站爱战网关键词
  • 网站文章系统wordpress手机轻主题
  • 美食网站代做西安php网站制作
  • 国际域名的外贸网站百度风云排行榜
  • 广州网站建设及推广游戏开发课程
  • 群晖wordpress域名西安企业网站排名优化工具
  • 做外贸网站公司哪家免费拍卖网站模板
  • 莞城区做网站建设网站怎么建设分类
  • 用凡科做网站要钱吗南京室内设计公司排名
  • 北京网站制作公司转型方向网站设计与实现毕业设计
  • 上海比较好的网站建设公司广州天与地网站建设
  • 手机h5建网站网络推广服务协议
  • 微信网站开发费用企业查询宝在线查询
  • 互联网行业招聘网站红酒网站建设策划书
  • 海口网站建设哪个好薇网站建设设计流程
  • 加强网站建设技术培训承德公司网站建设
  • 网站设计三把火做家电选招标采购哪一个网站好
  • 做网站资讯运营如何做好seo基础优化
  • php网站开发源代码珠海做网站哪家最专业
  • 绍兴建设局网站网站的域名起什么好处
  • 电商网站建设优化进出口外贸公司
  • 浙江省2011年1月高等教育自学考试 网站建设与管理试题与答案专做电器的网站
  • 住房和城乡建设部网站北京企业网站 优秀
  • 网站开发可行性分析报告科技项目的类型有
  • 企业网站创建需要多种语言吗做网络推广可以通过哪些渠道推广
  • 提供邯郸做wap网站电商运营怎么做数据分析
  • 网站建设合同怎么写网络营销就是网上消售吗