2023-06-09:什么是Redis事务?原理是什么?

这篇具有很好参考价值的文章主要介绍了2023-06-09:什么是Redis事务?原理是什么?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

2023-06-09:什么是Redis事务?原理是什么?

答案2023-06-09:

Redis中的事务是以一组命令的形式出现的,这些命令被认为是最小的执行单位。事务可以保证在一个单独独立的隔离操作中执行所有命令,而且所有命令都会按照指定的顺序经过序列化后被执行。在服务端执行事务的过程中,不受其他客户端发送给Redis的命令请求的干扰影响。

Redis 事务的注意点有哪些?

Redis事务的使用需要注意以下几点:

1.Redis 事务不支持回滚,不能像 MySQL 的事务那样可以选择性地输出。一旦命令提交给Redis,就会被执行,无法扔回到事务的起点。

2.Redis事务是原子执行的,要么全部执行成功,要么放弃执行。如果其中一个命令失败,则整个事务都会失败,但不会因为其中一个命令失败而导致其他命令的执行效果不确定。

3.执行事务期间,Redis服务器不会中断执行,也不会被其他客户机的请求干扰,这保证了事务操作期间的隔离性和原子性。

4.事务中的命令都是串行执行的,并且事务会尽量缩短命令合并的时间。如果有多个客户端同时访问同一个命令,会根据请求的时间顺序进行处理,避免了竞争和死锁。

Redis 事务为什么不支持回滚?

Redis事务执行期间不支持回滚的主要原因是为了避免增加复杂的实现逻辑和增加系统负担。 Redis只能通过在事务提交前执行所有命令来保证原子性的特性。如果Redis支持回滚,则必须存储事务执行前的状态,并在回滚后重置状态,这样会增加显著的存储和计算负担。

当命令执行期间发生语法错误等问题,Redis会在执行失败时报错,开发人员可以通过编写代码来处理这些错误。但是出现严重问题时,如网络故障或硬件问题等,Redis仍然会执行已经提交的事务命令,此时数据可能会出现严重不一致,需要开发人员自行修复。

总之,虽然没有回滚功能,但是Redis事务仍然是非常有用和实用的功能,能够提供高效、快速和可靠的多命令操作。开发人员需谨慎处理错误处理方式和保证数据一致性,以获得最佳实践的体验。

事务

事务是一组操作或动作的集合,这些操作要么全部执行,要么全部不执行。在执行事务期间,可以保证隔离性和原子性,即在同一事务中执行的操作相互独立,不受其他事务的干扰。如果其中一个操作发生错误,则仅回滚该事务,而不影响其他事务的执行结果。事务通常用于需要一系列操作来完成的任务,例如向数据库中插入多个数据,或将多个操作组合成一个原子操作。

以社交网站上用户A关注用户B为例,这个动作需要在用户A的关注表中添加用户B,并在用户B的粉丝表中添加用户A。将这两个操作组合成事务,可以确保在同一个事务中执行,要么全部执行,要么全部不执行。这样可以避免出现数据不一致的情况,确保关注关系的正确性。使用事务可以将多个数据库操作组合成一个原子操作,保证数据的一致性。

Redis提供了简单的事务功能,以multi命令开始事务,并在调用exec命令结束事务。将需要一起执行的命令放在multi和exec之间,Redis会将这些命令作为一个原子操作来处理,要么全部执行,要么全部不执行。如果在事务执行期间需要取消已经执行的命令,可以使用discard命令回滚整个事务。利用Redis的事务功能,可以执行多个命令并确保它们在同一个事务中执行,避免了因单个命令执行失败而导致的数据不一致问题。

一个客户端

2023-06-09:什么是Redis事务?原理是什么?

另外一个客户端

在事务没有提交的时查询(查不到数据)

2023-06-09:什么是Redis事务?原理是什么?

在事务提交后查询(可以查到数据)

2023-06-09:什么是Redis事务?原理是什么?

可以看到sadd命令此时的返回结果是QUEUED,代表命令并没有真正执行,而是暂时保存在Redis中的一个缓存队列(所以discard也只是丢弃这个缓存队列中的未执行命令,并不会回滚已经操作过的数据,这一点要和关系型数据库的Rollback操作区分开)。

只有当exec执行后,用户A关注用户B的行为才算完成,如下所示exec返回的两个结果对应sadd命令。

但是要注意Redis的事务功能很弱。在事务回滚机制上,Redis只能对基本的语法错误进行判断。

如果事务中的命令出现错误,Redis 的处理机制也不尽相同。

1、语法命令错误

2023-06-09:什么是Redis事务?原理是什么?

例如下面操作错将set写成了sett,属于语法错误,会造成整个事务无法执行,事务内的操作都没有执行:

2、运行时错误

例如:事务内第一个命令简单的设置一个string类型,第二个对这个key进行sadd命令,这种就是运行时命令错误,因为语法是正确的:

2023-06-09:什么是Redis事务?原理是什么?

可以看到Redis并不支持回滚功能,第一个set命令已经执行成功,开发人员需要自己修复这类问题。

Redis的事务原理

Redis的事务是在服务器端实现的,当用户执行MULTI命令时,服务器将对应的客户端对象设置为一个专门的状态,此状态下所有后续用户所执行的查询命令都不会被立即执行,而是被保存在一个事务队列中,直到用户执行EXEC命令为止。在执行EXEC命令前或在事务途中,客户端可以随时调用DISCARD命令来取消事务。当用户执行EXEC命令时,服务器会将该客户端对象中缓存的命令按照它们提交的顺序依次执行,并将执行结果返回给客户端。使用Redis事务可以将一系列命令作为单个原子操作执行,从而保证了操作的一致性。文章来源地址https://www.toymoban.com/news/detail-477279.html

到了这里,关于2023-06-09:什么是Redis事务?原理是什么?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【论文阅读】(2023.06.09-2023.06.18)论文阅读简单记录和汇总

    2023/06/09:虽然下周是我做汇报,但是到了周末该打游戏还是得打的 2023/06/12:好累好困,现在好容易累。 (TCSVT 2023)Facial Image Compression via Neural Image Manifold Compression (arxiv 2023)Exploring the Rate-Distortion-Complexity Optimization in Neural Image Compression (arxiv 2023)High-Similarity-Pass Attenti

    2024年02月09日
    浏览(28)
  • (学习日记)2023.06.09

    写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录,记录笔者认为最通俗、最有帮助的资料,并尽量总结几

    2024年02月15日
    浏览(30)
  • 2023-09-06力扣每日一题-摆烂暴力

    链接: [1123. 最深叶节点的最近公共祖先](https://leetcode.cn/problems/form-smallest-number-from-two-digit-arrays/) 题意: 如题 解: 今天搞一手暴力,按层存,按层取,直到只取到一个 实际代码: 限制: 树中的节点数将在 [1, 1000] 的范围内。 0 = Node.val = 1000 每个节点的值都是 独一无二 的。

    2024年02月09日
    浏览(24)
  • WuThreat身份安全云-TVD每日漏洞情报-2023-06-09

    漏洞名称:Rancher Labs Rancher 权限提升 漏洞级别:高危 漏洞编号:CVE-2023-22647,CNNVD-202306-022 相关涉及:Rancher Labs Rancher 2.6.0到2.6.13版本 漏洞状态:POC 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_ID=TVD-2023-13589 漏洞名称:BESDER IP摄像机视频播放工具访问控制 漏洞级别:中危 漏洞编号:CVE-2023

    2024年02月11日
    浏览(26)
  • 【2023】Redis事务

    Redis事务是一组命令的集合,这些命令要么全部执行,要么全部不执行。它们被视为一个单独的操作单元,要么完全成功,要么完全失败。 Redis事务可以用来实现ACID属性( 原子性、一致性、隔离性、持久性 )。 ACID是一组属性的缩写: 1️⃣:原子性,是指一个Redis事务中的

    2024年02月09日
    浏览(20)
  • 2023-06-17:说一说redis中渐进式rehash?

    2023-06-17:说一说redis中渐进式rehash? 答案2023-06-17: 在Redis中,如果哈希表的数组一直保持不变,就会增加哈希冲突的可能性,从而降低检索效率。为了解决这个问题,Redis会对数组进行扩容,通常是将数组大小扩大为原来的两倍。然而,这个扩容过程会引起元素在哈希桶中的

    2024年02月09日
    浏览(30)
  • 2023-06-01:讲一讲Redis常见数据结构以及使用场景。

    2023-06-01:讲一讲Redis常见数据结构以及使用场景。 答案2023-06-01: 字符串(String) 适合场景 缓存功能 Redis 作为缓存层,MySQL 作为存储层,在大部分请求中,数据的读取通常是从 Redis 中获取。由于 Redis 具有支持高并发的特性,因此缓存层通常能够加速读写操作,并减轻后端

    2024年02月07日
    浏览(49)
  • 一份详细 redis sentinel 哨兵架构搭建步骤<写于2023-04-06>

    redis 哨兵架构,其实是在 主从架构 基础上延伸的,sentinel 哨兵模式的 redis 实例,不提供读写操作的。实例相互之间,会感知到。 code: port 26379 daemonize yes # 改为后台启动 pidfile “/var/run/redis‐sentinel‐26379.pid” logfile “26379.log” dir “/usr/local/redis‐5.0.3/data” #sentinel monitor

    2023年04月14日
    浏览(25)
  • 2023-07-06:RabbitMQ中的AMQP是什么?

    2023-07-06:RabbitMQ中的AMQP是什么? 答案2023-07-06: AMQP AMQP(Advanced Message Queuing Protocol)是一个应用层协议的开放标准,旨在设计面向消息的中间件。基于AMQP协议的客户端和消息中间件可以自由地传递消息,不受客户端、中间件产品或开发语言的限制。其目标是实现一种被广泛

    2024年02月12日
    浏览(39)
  • Redis 事务、持久化、复制原理分析

    Redis是一种高性能的键值存储数据库,同时也是一种基于内存的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 Redis的事务机制提供了一种原子性地执行多个命令的方式,在同时发生多个 Redis 命令时,可以使用事务来确保它们都会被执行。 Redis的持久化机制可以

    2024年02月13日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包