Redis的事务与关系型数据库事务有何不同?

news2024/10/5 17:34:11

引言:关于 Redis 的事务很多人可能都是一知半解,大多数人只了解数据库的事务,并且是单体事务,对于 Redis 事务和常见关系型数据库的事务的区别还没有去了解过,本文就来详细进行介绍。

题目

Redis的事务与关系型数据库事务有何不同?

推荐解析

原子性差异

关系型数据库(比如 MySQL):事务中的所有操作要么全部完成,要么全部不完成,具有强原子性。
Redis:在 4.0 之前的版本中,事务实际上是通过 MULTI/EXEC 命令来实现的一系列命令的批量执行,如果中途某个命令失败,后续命令仍会执行。从 Redis 4.0 开始,引入了事务的原子性保证,但这种保证仅在客户端使用 MULTI/EXEC 时有效。

持久性差异

推荐去看下 MySQL 刷盘机制和 Redis 的刷盘机制,关于系统调用、后台线程、数据恢复等问题。

关系型数据库:事务完成后,更改的数据会被持久化到磁盘,即使系统崩溃也不会丢失。
Redis:作为一个内存数据库,数据主要存储在内存中。虽然 Redis 通过 RDB 和 AOF 机制提供了数据的持久化,但事务操作的持久性取决于配置和具体的持久化策略。

隔离性差异

关系型数据库:通常提供严格的隔离级别,如读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。
Redis:单线程模型天然避免了并发导致的数据不一致问题,但 Redis 的事务没有隔离级别的概念,事务中的命令在执行前不会被其他客户端观察到,但执行过程中可能会与其他客户端的命令交错执行。

一致性差异

关系型数据库:在事务开始和结束时,数据库从一个一致的状态转移到另一个一致的状态。
Redis:事务保证了操作的原子性,但对一致性的支持取决于具体的操作和数据结构。

并发控制

关系型数据库:使用锁或其他并发控制机制来处理多个事务的并发执行。
Redis:由于单线程模型,Redis 自身不会在服务器端进行并发控制,但客户端库可能实现乐观锁或事务的其他并发控制机制。

事务范围

关系型数据库:事务可以跨越多个表和数据库对象。
Redis:事务通常局限于单个 Redis 连接和单个数据库实例。

单体事务 VS 分布式事务

单体事务通常指在一个单一的数据库管理系统(DBMS)内部执行的事务。这种事务涉及的操作都是针对同一个数据库实例。

分布式事务涉及多个数据库或服务,它们可能分布在不同的服务器、应用或地理位置上。

分布式事务比单体事务更复杂,涉及到网络通信、多个系统间的协调等。

分布式事务解决方案

关于分布式可以去了解下 CAP 理论和 BASE 理论,对分布式理解还是很有帮助的。

两阶段提交协议(2PC)
这是一种经典的分布式事务解决方案,通过准备阶段和提交阶段来确保所有参与者要么全部提交,要么全部回滚。

三阶段提交协议(3PC)
这是对2PC的改进,增加了超时机制,以解决协调者故障时参与者的阻塞问题。

补偿事务(TCC)
TCC 代表 Try、Confirm 和 Cancel 三个操作。在 Try 阶段进行资源检测和预留,在 Confirm 阶段提交业务操作,在 Cancel 阶段释放预留资源。

消息队列 + 事件驱动
利用消息队列来保证本地操作和发送消息的原子性,通过事件驱动架构来处理消息,实现最终一致性。

使用 Seata
Seata 是一个开源的分布式事务解决方案,支持 AT、TCC、Saga 和 XA 等事务模式,通过全局事务协调者和分支事务的协调来处理分布式事务。

其他补充

鱼聪明 AI 的回答:

鱼聪明 AI 地址:https://www.yucongming.com/

随着Redis版本的升级,其架构从最初的单线程逐步引入了多线程特性,以提高性能和扩展性。以下是Redis单线程和多线程的升级历程,以及分布式锁的实现方法:

Redis单线程到多线程的升级

  1. Redis 4.0之前
    • Redis主要采用单线程模型,所有的命令执行和网络通信都在一个主线程中顺序执行。
  2. Redis 4.0及之后
    • 虽然Redis仍然主要在单个主线程中执行命令,但引入了后台线程处理一些耗时操作,如异步持久化、过期键的清理等。
  3. Redis 6.0
    • 引入了多线程特性,但主要用于处理网络IO的读写操作,而非命令执行。这意味着Redis仍然保持了单线程执行命令的原子性和一致性,同时利用多核CPU提高了网络IO的性能。

Redis多线程的实现

  • IO多线程:Redis 6.0通过配置文件启用IO多线程,可以设置多个IO线程来处理网络请求的读写操作。
  • 线程数设置:建议的线程数通常小于CPU核心数,以避免线程上下文切换的开销。
  • 命令执行:即使启用了多线程,Redis的命令执行仍然在主线程中顺序执行,保持了操作的原子性。

分布式锁的实现

分布式锁是分布式系统中用于同步不同进程或服务对共享资源访问的机制。以下是实现Redis分布式锁的一些常见方法:

  1. SETNX + EXPIRE
    • 使用SETNX命令尝试设置键,若成功则使用EXPIRE设置键的过期时间。
  2. SET命令扩展
    • 使用SET命令的NX(Not Exist)和EX(秒级过期)或PX(毫秒级过期)选项原子性地设置键和过期时间。
  3. Lua脚本
    • 通过Lua脚本保证SETNXEXPIRE的原子性执行,减少因命令分开执行导致的竞态条件。
  4. Redlock算法
    • 一种高级的分布式锁算法,通过尝试在多个独立的Redis实例上加锁来提高锁的安全性。
  5. Redisson框架
    • Redisson是一个基于Redis的Java客户端库,提供了多种分布式锁的实现,包括Redlock算法和自动续期机制。
  6. 多机分布式锁
    • 在多Redis实例部署的情况下,使用如Redisson提供的Redlock实现,确保分布式锁的高可用性和安全性。
  7. 其他实现
    • 包括使用Redisson的RLock对象或其他高级API来简化分布式锁的获取和释放操作。

分布式锁的最佳实践

  • 锁的粒度:尽量使用细粒度的锁,以减少锁争用。
  • 锁的超时:合理设置锁的超时时间,避免死锁。
  • 锁的重入:支持锁的重入性,允许同一线程多次获取同一把锁。
  • 锁的安全性:确保锁只能被持有者释放,防止其他线程误操作。

通过上述方法,Redis不仅可以通过多线程提升性能,还可以作为分布式系统中实现同步机制的关键组件。随着Redis版本的不断升级,其在分布式系统中的应用也越来越广泛。

欢迎交流

本文主要介绍 Redis 事务和常规的关系型数据库事务的不同之处,另外还有讲解单体事务和分布式事务的区别以及分布式事务的主要解决方案,关于代码实践部分需要读者自己去进行了解,因为一个案例并不能解决实际问题,需要不同场景进行对应的分析,在文末还有三个问题,欢迎小伙伴在评论区进行留言,面试鸭小程序已经全面上线,想要刷题备战实习拿 offer 的同学可以搜索面试鸭小程序!

1)Redis事务的原子性是如何在4.0版本之后得到改进的,相比于关系型数据库的事务原子性,它有哪些限制或不同之处?

2)在Redis 6.0引入多线程特性后,对于事务的处理方式有没有变化?如果有,这些变化对事务的执行和性能有哪些影响?

3)在实现分布式锁时,Redis的Redlock算法是如何确保在多个Redis实例之间保持锁的安全性的,它相比其他分布式锁实现方式有哪些优势和潜在的风险?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1800526.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【三】Linux网络配置详解

在RHEL 7系统中配置网络的方法有好几种,咱们这边先讲一下使用图形化工具和修改配置文件这两种方法来配置,其他方法大家可以下去自己研究研究。 一、使用图形化方式配置: 在电脑左上角开始一次点击Applications、System Tools、Settings&…

如何使用共享GPU平台搭建LLAMA3环境(LLaMA-Factory)

0. 简介 最近受到优刻得的使用邀请,正好解决了我在大模型和自动驾驶行业对GPU的使用需求。UCloud云计算旗下的[Compshare](https://www.compshare.cn/? ytagGPU_lovelyyoshino_Lcsdn_csdn_display)的GPU算力云平台。他们提供高性价比的4090 GPU,按时收…

[word] word悬挂缩进怎么设置? #经验分享#职场发展#经验分享

word悬挂缩进怎么设置? 在编辑Word的时候上方会有个Word标尺,相信很多伙伴都没使用过。其实它隐藏着很多好用的功能,今天就给大家分享下利用这个word标尺的悬挂缩进怎么设置,一起来看看吧! 1、悬挂缩进 选中全文&…

VBA语言専攻通知20240608

通知20240608 各位学员∶本周MF系列VBA技术资料增加621-625讲,T3学员看到通知后请免费领取,领取时间6月7日晚上19:00-6月8日晚上20:00。本次增加内容: MF621:为组合框添加工作表数据 MF622:在代码中使用π值 MF623:在窗体上使用切换按钮 MF624:删除…

使用difflib实现文件差异比较用html显示

1.默认方式&#xff0c;其中加入文本过长&#xff0c;需要换行&#xff0c;因此做 contenthtml_output.replace(</style>,table.diff td {word-wrap: break-word;white-space: pre-wrap;max-width: 100%;}</style>)&#xff0c;添加换行操作 ps&#xff1a;当前te…

最新PHP众筹网站源码 支持报名众筹+商品众筹+公益众筹等多种众筹模式 含完整代码包和部署教程

在当今互联网飞速发展的时代&#xff0c;众筹模式逐渐成为了创新项目、商品销售和公益活动融资的重要渠道。分享一款最新版的PHP众筹网站源码&#xff0c;支持报名众筹、商品众筹和公益众筹等多种众筹模式。该源码包含了完整的代码包和详细的部署教程&#xff0c;让新手也可以轻…

【Mac】Downie 4 for Mac(视频download工具)兼容14系统软件介绍及安装教程

前言 Downie 每周都会更新一个版本适配视频网站&#xff0c;如果遇到视频download不了的情况&#xff0c;请搜索最新版本https://mac.shuiche.cc/search/downie。 注意&#xff1a;Downie Mac特别版不能升级&#xff0c;在设置中找到更新一列&#xff0c;把自动更新和自动downl…

DeepDriving | 多目标跟踪算法之SORT

本文来源公众号“DeepDriving”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;多目标跟踪算法之SORT 1 简介 SORT是2016年发表的一篇文章《Simple Online and Realtime Tracking》中提出的一个经典的多目标跟踪算法&#xff0c;…

纵向导航栏使用navbar-nav-scroll溢出截断问题

项目场景&#xff1a; 组件&#xff1a;Bootstrap-4.6.2、JQuery 3.7.1 测试浏览器&#xff1a;Firefox126.0.1、Microsoft Edge125.0.2535.67 IDE&#xff1a;eclipes2024-03.R 在编写CRM的工作台主页面时&#xff0c;由于该页面使用的是较旧的技术&#xff0c;所以打算使用…

【Java数据结构】二叉树详解(三)

&#x1f512;文章目录&#xff1a; 1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; 2. 检查两颗树是否相同 3. 另一颗树的子树 4.翻转二叉树 5.对称二叉树 6.判断一颗二叉树是否是平衡二叉树 6.1第一种思路 6.2第二种思路 7.二叉树的构建及…

语音群呼之语音导航的应用

在数字化时代&#xff0c;语音群呼技术已成为企业、组织和个人高效沟通的重要工具。语音群呼不仅能够快速地将信息传递给目标群体&#xff0c;而且通过语音导航功能&#xff0c;还能确保信息传达的准确性和用户体验的优质性。本文将深入探讨语音群呼的语音导航功能&#xff0c;…

HTML:认识HTML与基本语法的学习

前言 HTML&#xff08;超文本标记语言&#xff09;是用于创建网页的标记语言&#xff0c;由一系列标签组成&#xff0c;定义网页中的元素。由蒂姆伯纳斯 - 李于1990年代初发明&#xff0c;最初用于科研机构间共享文档&#xff0c;迅速演变为Web开发基础。无论是电商、博客、新…

一条sql的执行流程

文章地址 https://blog.csdn.net/qq_43618881/article/details/118657040 连接器 请求先走到连接器&#xff0c;与客户端建立连接、获取权限、维持和管理连接 mysql缓存池 如果要查找的数据直接在mysql缓存池里面就直接返回数据 分析器 请求已经建立了连接&#xff0c;现在…

串联式固定测斜仪无需钢丝绳、安装方便、可回收利用边坡基坑矿山地灾常用

一、固定式测斜仪的简介 固定测斜仪是一种用于长期自动监测各种结构物的深层水平位移的设备&#xff0c;获取土体内部的位移变化趋势&#xff0c;监测数据上传至安锐测控云平台&#xff0c;用户即可实时查看结构深层水平位移数据&#xff0c;实时预警&#xff0c;保障结构的安全…

代码随想录算法训练营第四十八 | ● 121. 买卖股票的最佳时机 ● 122.买卖股票的最佳时机II

121. 买卖股票的最佳时机 买卖股票的最佳时机 视频讲解&#xff1a;https://www.bilibili.com/video/BV1Xe4y1u77q https://programmercarl.com/0121.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9A%84%E6%9C%80%E4%BD%B3%E6%97%B6%E6%9C%BA.html class Solution { public:int ma…

自友科技破解走班教育排课难题

新高考后&#xff0c;校园教务都面临着晋级&#xff0c;其中走班教育的分班排课是个巨大的挑战。 所以在分班排课的时候要清楚一下几个问题 一是&#xff1a;清楚的核算学生的选考科目。学生选科提交后做好并承认&#xff0c;最好是在分班后不要改或很少的一部分人改动。 二是…

世净超声波清洗机怎么样?美的、希亦、世净超声波清洗机谁更值得买?

在日常生活和专业领域中&#xff0c;清洁工作往往是既重要又烦琐的任务。特别是对于那些难以手工得尤为重要。关键是现在超声波清洗机已经不是从前的超声波清洗机了&#xff0c;不是只在工业领域上清洗一些重大零件了&#xff0c;已经逐渐开始能够清洗日常物品&#xff0c;像眼…

重庆工商大学社会工作专业试题及答案,分享几个实用搜题和学习工具 #媒体#学习方法#知识分享

搜题软件一般都是通过识别题目内容搜索出问题的答案&#xff0c;当识别内容不正确或搜索不到答案时&#xff0c;又得重新到其他软件进行重复的操作&#xff0c;很是麻烦。所以我们可以使用专业的识别工具&#xff0c;对题目内容进行识别&#xff0c;然后把提取出来的内容单独保…

【MySQL数据库】my.ini文件参数中文注释

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 &#x1f913; 同时欢迎大家关注其他专栏&#xff0c;我将分享Web前后端开发、人工智能、机器学习、深…

Qsemaphore

Qsemaphore 实现 给while循环阻塞延时 基本思路就是&#xff1a; whlie循环里面 通过m&#xff3f;bthreadFlag&m_bStatus这两个标志位&#xff0c;判断是否进入while循环&#xff0c;再根据40行的acquire&#xff08;&#xff09;来阻塞循环&#xff0c;因为定时器的槽函数…