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

引言:关于 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实例之间保持锁的安全性的,它相比其他分布式锁实现方式有哪些优势和潜在的风险?

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

git【工具软件】分布式版本控制工具软件

一、Git 的介绍 git软件的作用:管理软件开发项目中的源代码文件。 常用功能: 仓库管理、文件管理、分支管理、标签管理、远程操作 功能指令: add,commit,log,branch,tag,remote…

UE5 Mod Support 思路——纯蓝图

原创作者:Chatouille 核心功能 “Get Blueprint Assets”节点,用于加载未来的mod。用基础类BP_Base扩展即可。打包成补丁,放到Content\Paks目录下,即可让游戏访问到内容。 与文中所写不同的地方 5.1或者5.2开始,打…

mysql optimizer_switch : 查询优化器优化策略深入解析

码到三十五 : 个人主页 在 MySQL 数据库中,查询优化器是一个至关重要的组件,它负责确定执行 SQL 查询的最有效方法。为了提供DBA和开发者更多的灵活性和控制权,MySQL 引入了 optimizer_switch 系统变量。这个强大的工具允许用户开…

自动驾驶仿真(高速道路)LaneKeeping

前言 A high-level decision agent trained by deep reinforcement learning (DRL) performs quantitative interpretation of behavioral planning performed in an autonomous driving (AD) highway simulation. The framework relies on the calculation of SHAP values an…

Go微服务: 基于使用场景理解分布式之二阶段提交

概述 二阶段提交(Two-Phase Commit,2PC)是一种分布式事务协议,用于在分布式系统中确保多个参与者的操作具有原子性即所有参与者要么全部提交事务,要么全部回滚事务,以维持数据的一致性它分为两个阶段进行&…

3038. 相同分数的最大操作数目 I

题目 给你一个整数数组 nums,如果 nums 至少包含 2 个元素,你可以执行以下操作: 选择 nums 中的前两个元素并将它们删除。一次操作的分数是被删除元素的和。 在确保所有操作分数相同的前提下,请你求出最多能进行多少次操作。 …

数字IC后端物理验证PV | TSMC 12nm Calibre Base Layer DRC案例解析

基于TSMC 12nm ARM A55 upf flow后端设计实现训练营将于6月中旬正式开班!小班教学!目前还有3个名额,招满为止!有需要可以私信小编 ic-backend2018报名。吾爱IC社区所有训练营课程均为直播课! 这个课程支持升级成双核A…

李廉洋:6.7黄金亚盘洗盘暴跌,美盘最新分析策略。

黄金消息面分析:美联储降息可能是经济出现麻烦的信号。自去年10月以来,美国股市一直在上涨,原因是尽管利率持续走高,但美国经济和企业盈利仍保持强劲。如果市场对2024年下半年降息的信心增强,那么硬着陆的可能性就会增…

python-df的合并与Matplotlib绘图

1 数据连接 concat merge join (append 作为了解) append 竖直方向追加, 在最新的pandas版本中已经被删除掉了, 这里推荐使用concat 1.1 pd.concat 两张表, 通过行名、列名对齐进行连接 import pandas as pd df1 …

MS1112驱动开发

作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生在读,研究方向无线联邦学习 擅长领域:驱动开发,嵌入式软件开发,BSP开发 作者主页:一个平凡而乐于分享的小比特的个人主页…

【电路笔记】-分贝

分贝 分贝是以 10 为底的对数比,用于表示电路中功率、电压或电流的增加或减少。 1、概述 一般来说,分贝是响度的度量。 在设计或使用放大器和滤波器电路时,计算中使用的一些数字可能非常大或非常小。 例如,如果我们将两个放大器级级联在一起,功率或电压增益分别为 20 和…

嵌入式Linux系统编程 — 2.1 标准I/O库简介

目录 1 标准I/O库简介 1.1 标准I/O库简介 1.2 标准 I/O 和文件 I/O 的区别 2 FILE 指针 3 标准I/O库的主要函数简介 4 标准输入、标准输出和标准错误 4.1 标准输入、标准输出和标准错误概念 4.2 示例程序 5 打开文件fopen() 5.1 fopen()函数简介 5.2 新建文件的权限…

全程自动化操作 自动生成图文发布,矩阵批量软件系统 日产1-3万篇

一、简介 图文发布对于现代网站运营至关重要,然而手动创建和发布图文内容效率低下且易出错。全自动化图文生成发布流程可以解决这个问题。本文将详细说明如何以编程方式实现这一流程。 二、模块设计 该流程主要包含三个模块:图像生成,文本生成…

前端解析文件流格式数据异常时并给提示

把后端返回的文件流格式转换成正常数据格式 断点调试返回值 network查看返回值 一、blob类型 let stringData:any await this.blobToString(res); blobToString(blob) { return new Promise((resolve, reject) > { const reader new FileReader(); reader.onloadend (…

通过U盘将第三方软件安装到各大品牌电视的方法

在本教程中,小武给大家整理了通过U盘的方式安装第三方软件到电视盒子上,可直接使用通用U盘的方式来进行安装。 如果您相应电视品牌按通用方式无法完成需求,下面为您也贴心整理了20款主流智能电视和电视盒子的U盘安装指南。这些步骤适用于小米…

Vxe UI vxe-form 实现折叠表单,当表单很多时实现自动收起与展开

Vxe UI vue vxe-form 实现折叠表单&#xff0c;当表单很多时实现自动收起与展开 代码 folding 用于将当前表单项设置为默认隐藏 collapse-node 设置折叠按钮&#xff0c;加上之后会自动在该表单项的右侧显示一个折叠按钮 <template><div><vxe-formtitle-colo…

c++ EECS280

Introduction Euchre (pronounced “YOO-kur”) is a card game popular in Michigan. The learning goals of this project include Abstract Data Types in C, Derived Classes, Inheritance, and Polymorphism. You’ll gain practice with C-style Object Oriented Progr…

操盘手专栏 | 0-1搞懂TikTok广告优化该怎么玩!

如果你正想要或计划投放TikTok广告来提高杠杆效益&#xff0c;是否有面临下面的难题&#xff1a; 难找到系统的TikTok投放知识&#xff1f; 不懂得如何制定广告计划&#xff1f; 投放效果怎样才算有效优化&#xff1f; ...... 为此&#xff0c;超店有数邀请到了拥有8年营销…

新媒体暴力起号必备因素!沈阳新媒体运营培训学校

1周涨粉10w&#xff1f;这对普通人来说可以说是天文数字&#xff0c;但只要掌握方式方法&#xff0c;普通人也能做到&#xff01; 面试经验丰富的人都深知&#xff0c;给面试官留下的第一印象相当重要&#xff0c;几乎决定了80%的面试机会。标题也是如此&#xff0c;在完成一篇…

华为面经整理

文章目录 实习第一面准备提问相关算法相关 第一面结果提问环节 总结 实习 第一面准备 提问相关 操作系统有哪些功能 进程管理&#xff1a; 进程调度、进程同步和通信、多任务处理 内存管理&#xff1a; 内存分配、虚拟内存技术、内存保护 文件系统管理&#xff1a; 文件存储…