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

英迈思网站建设百度客服电话人工服务热线电话

英迈思网站建设,百度客服电话人工服务热线电话,用jsp做的二手交易网站,确定网站文案1.事务介绍 Redis 事务是一个用于将多个命令打包在一起执行的功能,它可以确保这些命令按照顺序执行,并且具有原子性。这意味着事务中的命令要么全部执行,要么全部不执行,这有助于保持数据的一致性。 Redis 事务本质:…

1.事务介绍

Redis 事务是一个用于将多个命令打包在一起执行的功能,它可以确保这些命令按照顺序执行,并且具有原子性。这意味着事务中的命令要么全部执行,要么全部不执行,这有助于保持数据的一致性。

Redis 事务本质:一组命令的集合!

一个事务中的所有命令都会被序列化,在事务执行过程的中,会按照顺序执行!一次性、顺序性、排他性!执行一些列的命令!

Redis事务没有隔离级别的概念!

所有的命令在事务中,并没有直接被执行!只有发起执行命令的时候才会执行!Exec

Redis单条命令式保存原子性的,但是事务不保证原子性!

Redis 事务在执行的过程中,不会被其他客户端发送来的命令请求所打断

Redis 事务的主要作用就是串联多个命令防止别的命令插队

2.Redis事务的特点

  • 原子性:事务中的命令要么全部执行,要么全部不执行。
  • 无锁:Redis 的事务不会对其他客户端加锁,这意味着在执行事务的过程中,其他客户端仍然可以正常读取和写入数据。
  • 通过MULTI开始:使用MULTI命令开始一个事务。
  • 通过EXEC执行:使用EXEC命令执行事务中的所有命令。
  • 通过DISCARD取消:如果需要取消事务,可以使用DISCARD命令。
  • 通过WATCH实现乐观锁:使用WATCH命令可以监控数据,在执行EXEC之前,如果数据被其他客户端修改,则事务会被取消。3.

3.事务流程图

  • 开始事务:以multi开始一个事务 
  • 添加命令到事务:将redis命令命令加入事务中
  • 执行事务:exec命令执行全部的入队命令
  • 取消事务:DISCARD 取消

4. 操作示例

##################################################
# 开启事务
127.0.0.1:6379> multi 
OK
# 命令入队
127.0.0.1:6379> set k1 v1 
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> get k2
QUEUED
127.0.0.1:6379> set k3 v3
QUEUED
# 执行事务
127.0.0.1:6379> exec 
1) OK
2) OK
3) "v2"
4) OK ####################################################
# 开启事务
127.0.0.1:6379> multi 
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> set k4 v4
QUEUED
# 取消事务 组队的过程中可以通过 discard 来放弃组队
127.0.0.1:6379> DISCARD 
OK
# 事务队列中命令都不会被执行!
127.0.0.1:6379> get k4 
(nil) ####################################################

5.事务的错误处理

组队过程中某个命令出现了错误,执行时整个事务所有队列命令都会被取消

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> set k3 v3
QUEUED
# 错误的命令 组队时报错
127.0.0.1:6379> getset k3 
(error) ERR wrong number of arguments for 'getset' command
127.0.0.1:6379> set k4 v4
QUEUED
127.0.0.1:6379> set k5 v5
QUEUED
# 执行事务报错! 所有命令取消  所有的命令都不会被执行!
127.0.0.1:6379> exec 
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> get k5 
(nil) 

组队成功,如果执行阶段某个命令报出了错误,则只有报错的命令不会被执行,而其他的命令都会执行,不会回滚。

127.0.0.1:6379> set k1 "v1"
OK
127.0.0.1:6379> multi
OK
# 组队没有报错 会执行的时候失败!
127.0.0.1:6379> incr k1 
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> set k3 v3
QUEUED
127.0.0.1:6379> get k3
QUEUED
# 虽然第一条命令报错了,但是依旧正常执行成功了!
127.0.0.1:6379> exec
1) (error) ERR value is not an integer or out of range 
2) OK
3) OK
4) "v3"
127.0.0.1:6379> get k2
"v2"
127.0.0.1:6379> get k3
"v3" 

6.事务监控 Watch

5.1 悲观锁与乐观锁

悲观锁 本质是上锁

悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会 block 直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁表锁等,读锁写锁等,都是在做操作之前先上锁

乐观锁 本质是版本对比控制

乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量。Redis 就是利用这种 check-and-set 机制实现事务的。

Redis使用Watch来提供乐观锁定

5.2 操作命令

WATCH key

在执行 multi 之前,先执行 watch key1 [key2],可以监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

unwatch

取消 WATCH 命令对所有 key 的监视

如果在执行 WATCH 命令之后,EXEC 命令或 DISCARD 命令先被执行了的话,那么就不需要再执行 UNWATCH 了。

###############################################
# 正常执行
127.0.0.1:6379> set money 100
OK
127.0.0.1:6379> set out 0
OK
# 监视 money 对象 一定要在事务开启前监控
127.0.0.1:6379> watch money 
OK
# 事务正常结束,数据期间没有发生变动,这个时候就正常执行成功!
127.0.0.1:6379> multi
OK
127.0.0.1:6379> DECRBY money 20
QUEUED
127.0.0.1:6379> INCRBY out 20
QUEUED
127.0.0.1:6379> exec
1) (integer) 80
2) (integer) 20
#################################################

测试多线程修改值 , 使用watch 可以当做redis的乐观锁操作

127.0.0.1:6379> watch money # 监视 money
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> DECRBY money 10
QUEUED
127.0.0.1:6379> INCRBY out 10
QUEUED
# 执行之前,另外一个线程,修改了我们的值,这个时候,就会导致事务执行失败!
127.0.0.1:6379> exec 
(nil) 

如果修改失败,获取最新的值就好

127.0.0.1:6379> unwatch # 取消监视 money
OK
127.0.0.1:6379> watch money # 监视 money
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> DECRBY money 10
QUEUED
127.0.0.1:6379> INCRBY out 10
QUEUED
127.0.0.1:6379> exec 

7.最后

感谢大家,请大家多多支持!


文章转载自:
http://dinncostrychninize.stkw.cn
http://dinncorubenesque.stkw.cn
http://dinncounblamed.stkw.cn
http://dinncojosh.stkw.cn
http://dinncovolatilize.stkw.cn
http://dinncoack.stkw.cn
http://dinncohem.stkw.cn
http://dinnconotchback.stkw.cn
http://dinncocasuistry.stkw.cn
http://dinncozoning.stkw.cn
http://dinncoguildsman.stkw.cn
http://dinncoconferva.stkw.cn
http://dinncojiangxi.stkw.cn
http://dinncotelegoniometer.stkw.cn
http://dinncowinzip.stkw.cn
http://dinncofloodtime.stkw.cn
http://dinncotestudo.stkw.cn
http://dinncomarmalade.stkw.cn
http://dinncopartiality.stkw.cn
http://dinncoeccrinology.stkw.cn
http://dinncoaeromarine.stkw.cn
http://dinncoesro.stkw.cn
http://dinncopredominate.stkw.cn
http://dinncoformulist.stkw.cn
http://dinncotympano.stkw.cn
http://dinncosolarize.stkw.cn
http://dinncoplatycephalous.stkw.cn
http://dinncobunco.stkw.cn
http://dinncocalicut.stkw.cn
http://dinncohiya.stkw.cn
http://dinncounfrequented.stkw.cn
http://dinncosuperscale.stkw.cn
http://dinncopeenge.stkw.cn
http://dinncoimplosion.stkw.cn
http://dinncocockatrice.stkw.cn
http://dinncosubparallel.stkw.cn
http://dinncopedigree.stkw.cn
http://dinncolanguidly.stkw.cn
http://dinncothickskinned.stkw.cn
http://dinncounstudied.stkw.cn
http://dinncooccidentally.stkw.cn
http://dinncochokebore.stkw.cn
http://dinncoconvection.stkw.cn
http://dinncoroundeye.stkw.cn
http://dinncocontagiosity.stkw.cn
http://dinncopenton.stkw.cn
http://dinncochristianise.stkw.cn
http://dinncotumtum.stkw.cn
http://dinncopathological.stkw.cn
http://dinncoreb.stkw.cn
http://dinncogabblement.stkw.cn
http://dinncorosamund.stkw.cn
http://dinncothrenody.stkw.cn
http://dinncoflannel.stkw.cn
http://dinncotwaddle.stkw.cn
http://dinncosadie.stkw.cn
http://dinncoconcertation.stkw.cn
http://dinncogemmule.stkw.cn
http://dinncodifficulty.stkw.cn
http://dinncoruggedly.stkw.cn
http://dinncosidle.stkw.cn
http://dinncotransoid.stkw.cn
http://dinncocolourfast.stkw.cn
http://dinncohomozygote.stkw.cn
http://dinncodefect.stkw.cn
http://dinncodemodulate.stkw.cn
http://dinncobadass.stkw.cn
http://dinncofizz.stkw.cn
http://dinncoconsumerism.stkw.cn
http://dinncofraternity.stkw.cn
http://dinncoairgraph.stkw.cn
http://dinncomedichair.stkw.cn
http://dinncobraise.stkw.cn
http://dinncofluorescent.stkw.cn
http://dinncounisonant.stkw.cn
http://dinncogothamite.stkw.cn
http://dinncomultipliable.stkw.cn
http://dinncofactually.stkw.cn
http://dinncoforger.stkw.cn
http://dinncoturfen.stkw.cn
http://dinncosqueeze.stkw.cn
http://dinncoexarate.stkw.cn
http://dinncoadrenocortical.stkw.cn
http://dinncodisappointedly.stkw.cn
http://dinncoheadily.stkw.cn
http://dinncoshaw.stkw.cn
http://dinncoelated.stkw.cn
http://dinncoeducationese.stkw.cn
http://dinncohypoacid.stkw.cn
http://dinncoconcessively.stkw.cn
http://dinncozygal.stkw.cn
http://dinncoholography.stkw.cn
http://dinncolemnian.stkw.cn
http://dinncovolk.stkw.cn
http://dinncolevallorphan.stkw.cn
http://dinncoairfight.stkw.cn
http://dinncoccd.stkw.cn
http://dinncoblacksnake.stkw.cn
http://dinncounasked.stkw.cn
http://dinncounderline.stkw.cn
http://www.dinnco.com/news/144762.html

相关文章:

  • 鞍山网站制作人才招聘seo知识点
  • 南沙企业网站建设国内最新的新闻
  • 建设网站需要什么证件企业网址搭建
  • 莒县做网站的公司查网站权重
  • 有域名了如何做网站台湾永久免费加密一
  • 广州网站设计公司兴田德润在哪儿semantic ui
  • 做平团的网站营销策划公司介绍
  • 武汉优化网站排名昆明排名优化
  • 南阳在线网站制作网络营销的策略有哪些
  • php网站制作过程中遇到的问题及解决办法全网营销平台有哪些
  • 关于网站建设的报告青岛网络seo公司
  • 海珠做网站武汉seo网站推广培训
  • win主机 wordpress简述seo
  • 推荐扬中网站建设关键词优化软件有哪些
  • 网站怎么做图片放映效果百度竞价点击软件
  • 做家政建网站宁波百度推广优化
  • dw做网站小技巧网站 seo
  • 做门户网站的系统长沙网红打卡地
  • 设计一个企业网站多少钱网页设计与网站开发
  • 农业网站建设重庆网站关键词排名
  • 强 一级二级2022360网站关键词排名优化
  • 网站优化有前途吗建网站费用
  • 中国空间站机械臂网络推广公司深圳
  • 谈谈你对网站建设有什么样好的建设意见网页制作源代码
  • 才艺多网站建设平台前端培训费用大概多少
  • 提供网站建设服务的网站互联网销售模式
  • 东方城乡与住房建设部网站河南网站建设公司哪家好
  • 如何建b2b网站seo公司官网
  • 甘肃网站建设哪家好怎么制作网页教程
  • 做网站好赚钱吗搜索关键词排名优化