您的位置:首页 > 房产 > 家装 > 如何建立一个网站链接把文件信息存里_邢台交友123_友情链接例子_门户网站建站系统

如何建立一个网站链接把文件信息存里_邢台交友123_友情链接例子_门户网站建站系统

2024/12/23 14:27:26 来源:https://blog.csdn.net/kelai_6792/article/details/142343598  浏览:    关键词:如何建立一个网站链接把文件信息存里_邢台交友123_友情链接例子_门户网站建站系统
如何建立一个网站链接把文件信息存里_邢台交友123_友情链接例子_门户网站建站系统

目录

  • Redis是如何实现事务的?
  • 事务中执行的命令出现错误,会回滚事务吗?
  • 同一个连接可以重复开启事务吗?
  • 多个客户端同时开启事务会怎样?
  • 使用Redis事务只用MULTI和EXEC吗?
  • Redis中的WATCH机制是怎么实现的?
Redis是如何实现事务的?

解读
事务要满足ACID四个原则。了解Redis实现事务的机制,就能了解Redis是如何分别保证ACID的。同时,了解了事务实现机制,也能清楚知道Redis事务有何优劣,在使用时如何避免Redis事务缺点。

参考

  • Redis事务

概要

  1. Redis通过四个命令实现事务: WATCH, MULTI, EXEC, DISCARD
  2. Redis事务以MULTI命令开始,EXEC/DISCARD命令结束。EXEC用于提交事务,DISCARD用于取消事务。
  3. 在开启事务时,Redis操作命令并不会立即执行,而是会先进入事务队列。Redis事务队列是一个FIFO队列
  4. 当执行EXEC命令时,会把事务队列中的命令逐个执行,不会被任何命令中断。
事务中执行的命令出现错误,会回滚事务吗?

解读
通常,一个事务中会有不止一个Redis操作,任何一个操作都有失败的可能。在有操作出错的情况下,会影响事务的执行吗?

参考

  • Redis事务

概要

  1. 首先,Redis事务时不支持回滚的。也就是说,如果事务中的命令执行出错,已经执行的命令不会撤回,后续的命令也会继续执行。
  2. Redis事务的命令分为入队和执行两个阶段。在入队(进入事务队列)时出错,Redis会忽略入队出错的命令,不会影响后续命令入队。执行时出错,出错命令会被Redis忽略,其他没有出错的命令均会执行。
同一个连接可以重复开启事务吗?

解读
本质问题是是否允许事务嵌套。

参考

  • Redis设计与实现-事务
  • 剖析!Redis事务实现原理

概要

  1. Redis事务不能嵌套。如果再收到MULTI命令开启事务,会返回错误(redis-cli会返回(error) ERR MULTI calls can not be nested这样的错误)
  2. 遇到嵌套事务返回错误后,并不会影响事务队列继续接收命令,也不会修改事务队列中的任何数据。
多个客户端同时开启事务会怎样?

解读
在并发情况,很容易出现多个客户端同时开启事务的情况。这时Redis会区分客户端维护事务队列吗?另外,实际工程中为了提升性能,通常会用Redis连接池复用连接,这种情况下,会出现连接复用导致事务嵌套吗?

参考

  • Redis设计与实现-事务
  • 剖析!Redis事务实现原理
  • Sping Data Redis 使用事务时,不关闭连接的问题

概要

  1. Redis事务队列是与连接绑定的,不同的连接中允许同时开启事务,不会相互影响
  2. 合理的事务管理器中,会在开启事务时绑定连接,防止连接被其他请求复用。不过应用不当,会出现连接不能被归还的问题。(由此可见,一个优秀的事务管理器是多么重要)
使用Redis事务只用MULTIEXEC吗?

解读
使用Redis事务,不能单纯只用MULTIEXEC,因为某些key在事务执行时已经变了。正确的Redis事务需要保证事务执行时,事务涉及的数据没有被修改。

参考

  • Redis设计与实现-事务

概要

  1. 在开启事务前,使用WATCH命令监视指定的key,形成乐观锁
  2. 事务执行时,如果被WATCH的key发生了变化,则事务失效,不能执行。
Redis中的WATCH机制是怎么实现的?

解读
无他,只是为了了解底层实现原理

参考

  • Redis事务
  • Redis设计与实现-事务

概要

  1. 每个被WATCH的key都会维护一个WATCH这个key的所有client列表
  2. 当被WATCH的key发生修改时(执行任意修改命令),所有WATCH该key的client的REDIS_DIRTY_CAS字段会被修改为打开状态。
  3. 当执行事务时,如果这个client的REDIS_DIRTY_CAS字段被打开,说明有至少一个数据被修改,事务不能执行。

参考
Redis官方文档-Transactions

最后编辑于:2024-09-18 20:51:05


喜欢的朋友记得点赞、收藏、关注哦!!!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com