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

Redis到底支不支持事务啊?

大家好,我是锋哥。今天分享关于【Redis到底支不支持事务啊?】面试题。希望对大家有帮助;

Redis到底支不支持事务啊?

1000道 互联网大厂Java工程师 精选面试题-Java资源分享网

Redis 支持事务,但它的事务模型与传统的关系型数据库的事务机制有所不同。Redis 的事务是通过 MULTIEXECWATCHDISCARD 等命令来实现的。以下是 Redis 事务的关键点:

1. MULTI 命令

  • MULTI 命令标志着事务的开始。之后的所有命令都会被放入事务队列,而不会立即执行。
  • 在执行 MULTI 后,Redis 会进入事务状态,命令将会被排队执行,但此时命令并不会立即执行,而是等待 EXEC

2. 命令队列

  • 在 MULTI 命令和 EXEC 命令之间,可以发送多个 Redis 命令,这些命令会被加入事务队列,直到执行 EXEC 命令为止。
  • 这些命令将按顺序执行,并且不会被其他客户端的命令中断。

3. EXEC 命令

  • EXEC 命令会执行事务队列中的所有命令。
  • 当 EXEC 被执行时,Redis 会逐个执行队列中的命令,并且这些命令是原子的,不会被其他客户端的命令插入执行。

4. DISCARD 命令

  • DISCARD 命令可以取消当前事务,丢弃事务队列中的所有命令。

5. WATCH 命令(乐观锁)

  • Redis 还提供了 WATCH 命令,它允许你监视一个或多个键,在事务执行之前,如果监视的键发生了变化,则事务会被中断,EXEC 会返回一个空数组。
  • 这就是 Redis 实现的一种乐观锁机制,帮助避免并发冲突。

Redis 事务的特点:

  • 原子性:Redis 的事务在 EXEC 执行时是原子性的,也就是说,事务中的所有命令会一次性执行完成,或者如果某个命令执行失败,整个事务会被放弃。这个原子性仅限于事务队列中的命令,不会跨客户端。

  • 没有隔离性和持久性:Redis 的事务并不像传统数据库的事务那样提供隔离性(即事务间不会互相干扰)和持久性(事务完成后的数据是否持久化到磁盘)。Redis 并不提供完整的ACID事务支持。

  • 无回滚:一旦事务中的命令被执行,它们就无法回滚。如果某个命令执行失败,事务不会自动撤回或回滚执行的其他命令,这和传统数据库的事务有很大不同。

  • 单个线程执行:Redis 在单线程环境下处理事务,事务内的命令按顺序执行,因此不会出现并发冲突问题。

总结

Redis 支持事务机制,但它与传统关系型数据库的事务处理有所不同。它的事务模型没有提供严格的隔离性和回滚机制,事务中的命令要么全部执行,要么不执行(通过 EXEC)。并且,事务内的命令执行顺序是严格的,不会与其他客户端的命令交错执行。


http://www.kler.cn/a/457146.html

相关文章:

  • 【数据仓库】hadoop3.3.6 安装配置
  • 自定义luacheck校验规则
  • 2024165读书笔记|《飞花令·合》——人生飘忽百年内,且须酣畅万古情
  • 解决virtualbox出现开启DHCP之后ubuntu虚拟机之后IP重复的问题
  • 【02】获取portal中服务地址的列表信息
  • 【深度学习】多目标融合算法—样本Loss提权
  • Docker安装GPUStack详细教程
  • 知识碎片-环境配置
  • 设计模式通俗解释
  • 基于springboot校园招聘系统源码和论文
  • c++---------------------------string
  • 深入解析JVM中对象的创建过程
  • 用 Python 从零开始创建神经网络(十八):模型对象(Model Object)
  • 隨筆20241226 ExcdlJs 將數據寫入excel
  • C# winform 报错:类型“System.Int32”的对象无法转换为类型“System.Int16”。
  • WPF编程excel表格操作
  • PDB数据库解析:
  • C 语言中 strlen 函数的深入剖析
  • leetcdoe 1670.设计前中后队列
  • opencv与pyqt6结合例子
  • 用VBA自动更正错误的注释引用序号
  • python圣诞节简单寻宝小游戏
  • Unity功能模块一对话系统(2)打字机淡入效果
  • 喜报 | 擎创科技入围上海市优秀信创解决方案
  • Rancher V2.9.0 Docker安装教程
  • 神经网络入门实战:(二十二)只训练 (多层网络的) 指定层 / (单层网络的) 指定参数