完整教程:今日面试之快问快答:Redis篇

news/2025/10/12 15:33:15/文章来源:https://www.cnblogs.com/wzzkaifa/p/19136684

1. Redis 支持事务吗?

Redis 是支持“事务”的,但和大家在数据库里理解的事务不太一样。

  • Redis 事务通过 MULTIEXECDISCARDWATCH 这些命令来实现。

  • MULTIEXEC 之间,你输入的命令只是“排队”,直到 EXEC 时才会一次性顺序执行。


2. Redis 的事务能回滚吗?

严格来说:Redis 事务不能像数据库那样进行回滚。

  • 如果事务里的某个命令语法错误(比如拼写错了),Redis 在 EXEC 时会发现并且整个事务都不会执行。

  • 运行时错误(比如对一个 string 执行 list 操作),Redis 只会在那条命令执行时报错,前面的命令依然执行,后面的命令也继续执行,不会回滚。就是但如果

这就意味着 Redis 的事务是原子性地执行命令队列,而不是保证所有命令都成功才提交。


3. 为什么 Redis 不拥护事务回滚?

这里涉及 Redis 的设计理念:

  1. 简单性优先:Redis 核心目标是高性能和简单模型,不想像数据库那样维护复杂的回滚日志。

  2. 数据处理幂等性:Redis 鼓励开发者在设计时保证操作幂等或用 WATCH 乐观锁机制去控制。

  3. 性能考虑:事务回滚必须额外的存储和计算成本,Redis 为了保持快速执行,选择放弃传统回滚机制。


4. 那开发中要怎么办?

常见几种做法:

  • 使用 WATCH 实现乐观锁:监控关键 key,假设在事务执行前被修改过,就放弃事务。

  • 保证命令幂等:比如重复执行不会产生错误状态。

  • Lua 脚本:把多条命令写到一段 Lua 脚本里,Redis 会保证脚本原子执行。

结论(一句话)

Redis 不拥护传统意义上的事务回滚(undo/rollback)MULTI/EXEC 不会在执行过程中自动回滚已经生效的命令;只有在“队列阶段”检测到错误时才可能拒绝并丢弃整个队列(以及 WATCH 能在冲突时中止事务)。

核心机制(你需要知道的行为差别)

  1. MULTI / EXEC 的工作流

    • MULTI 之后命令被 排队(服务器回复 QUEUED),直到 EXEC 才真正执行。EXEC 会按顺序逐条执行这些命令并返回每条命令的结果数组。

  2. 两种错误时机很关键(影响是否会执行/回滚)

    • 队列阶段发现错误(queue-time):比如语法/参数错误,会在你发命令时立即报错并不把该命令入队;从 Redis 2.6.5 起,如果积累命令时检测到错误,EXEC 会拒绝执行并丢弃队列。

    • 执行阶段失败(exec-time):例如对 string 做 list 操作会在执行时返回 WRONGTYPE 错误;但其它已排队并成功执行的命令不会回滚EXEC 会把每条命令的结果(包括错误)返回给客户端。

WATCH(乐观锁)能做什么

WATCH 会监视 key:如果在 WATCH 后到 EXEC 前这些 key 被别人改了,EXEC 会返回 null(事务被中止),这是一种乐观并发控制,能避免并发冲突导致部分执行。注意这不是“回滚”,而是“在冲突时不执行任何入队命令”。Redis

Lua 脚本(EVAL)——更接近“原子性”的替代,但有核心 caveat

  • Lua 脚本在执行期间阻塞其它客户端,保证隔离(其它客户端不会看到脚本执行期间的中间状态)。这是 Redis 文档所称的脚本“原子执行”的含义。

  • 不要把这个“隔离”误认为传统数据库那种带回滚的原子性——如果脚本在中间抛错,很多实践和讨论表明之前已经执行的写入不会被自动回滚(社区对这点有不少讨论/示例)。也就是说脚本可以保证“别人不会看到部分执行的中间态”,但脚本内部如果发生运行时错误,可能会留下部分更改。

  • (额外复杂性:脚本的复制/持久化有不同模式,和 AOF/复制方式的选择有关,出错/崩溃下的恢复语义有细节,官方文档里有说明。)

为什么 Redis 不做 rollback(设计理由)

  • 简单与性能优先:维护 undo 日志、回滚机制会显著增加复杂度和开销,和 Redis 作为内存、高性能数据结构服务器的设计目标冲突。

  • 鼓励应用层解决:Redis 提供 WATCH、Lua 脚本、以及原子命令(如 INCR, SETNX)来满足大多数并发/原子性需求;复杂的事务语义通常建议交给关系型数据库或在应用层实现补偿逻辑。

实践建议(针对Java 后端开发者)

  1. 需要“全或无”且必须严格回滚 → 用关系型数据库或支持事务回滚的存储。Redis 不适合作为需要完整 ACID 回滚保证的主存储。

  2. 大多数多命令原子需求 → 用 Lua 脚本(EVAL),把逻辑放在服务器端一次运行(注意错误处理与超时/性能)。但记得:如果脚本内部可能抛错并且你不能接受部分写入,脚本中要自己达成补偿/回滚逻辑(记录旧值并在出错时恢复),或者在脚本里事前校验所有前置条件,尽量避免中途出错。

  3. 并发冲突场景 → 用 WATCH + MULTI(乐观重试),读取—计算—MULTI—排队写—EXEC,若 EXEC 返回 null 就重试。

  4. 设计为幂等 + 补偿:在业务层尽量让操作幂等,或设计可补偿运行(补偿事务),这样即便部分写入发生也能安全恢复。

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

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

相关文章

SSL/TLS协议如何确保HTTP通信的安全

SSL(Secure Sockets Layer)和TLS(Transport Layer Security)协议是网络安全的基石,它们为HTTP通信提供了一个安全的层次,通常被称为HTTPS。这些协议确保了在客户端与服务器之间传输的数据的机密性和完整性。 以下…

2025钢衬塑储罐厂家最新权威推荐榜:耐腐性能与结构强度双优

2025钢衬塑储罐厂家最新权威推荐榜:耐腐性能与结构强度双优在化工、环保、制药等工业领域,储罐设备的性能直接关系到生产安全与运营效率。钢衬塑储罐凭借其独特的结构优势——外层钢壳提供坚实支撑,内层塑料衬里确保…

2023-网鼎杯web-platfrom

platfrom 大佬wp https://blog.xmcve.com/2024/11/04/%E5%BC%BA%E7%BD%91%E6%9D%AF2024-Writeup/#title-8 https://blog.yemaster.cn/post/123#go-ax-header-4 这题的考点是session反序列化以及字符逃逸 session反序列…

区分iBatis与MyBatis:两个Java数据库框架的比较

iBatis和MyBatis都是流行的Java持久层框架,它们提供了一种将Java对象与数据库表关联的方法。尽管它们在功能上有所重叠,但两者之间存在一些关键差异。 iBatis是最早出现的框架之一,由Clinton Begin开发,并在2002年…

2025大棕拉链厂家权威推荐榜:品质工艺与创新设计深度解析

2025大棕拉链厂家权威推荐榜:品质工艺与创新设计深度解析在纺织辅料行业快速发展的今天,大棕拉链作为连接功能与美学的关键部件,其品质直接影响着服装、箱包等产品的整体价值。随着新材料、新工艺的不断涌现,大棕拉…

JavaScript加密与解密技术:Hook技术应用案例分析

JavaScript中的加密与解密技术是网络安全领域的重要组成部分,它们确保了数据传输的安全性和数据隐私。在Web开发中,经常需要对敏感信息进行加密处理,以防止在客户端与服务器之间传输过程中被第三方截获和篡改。同时…

Oracle数据库创建表空间和索引的SQL语法示例

在Oracle数据库中,创建表空间是一种常见的数据库管理任务,它允许管理员组织和管理数据库中的数据文件。表空间是存储数据的逻辑单元,可以包含一个或多个物理数据文件。索引则用于提高查询性能,它们可以快速定位表中…

NOIP2016普及组port

NOIP2016普及组 T3海港(port) P2058 [NOIP 2016 普及组] 海港 题目背景 NOIP2016 普及组 T3 题目描述 小 K 是一个海港的海关工作人员,每天都有许多船只到达海港,船上通常有很多来自不同国家的乘客。 小 K 对这些到达…

从增长焦虑到经营确定性:巨益OMS业财一体化的实践路径

跨境电商正处在一个“流量见顶、成本抬升、监管趋严”的关键拐点。 过去依靠低价和广告投放的粗放式增长模式,已难以应对复杂的全球经营现实。 区域分化加剧:欧美市场重视品牌与合规,东南亚聚焦性价比与供应链速度。…

Alexa对话式AI技术进展全解析

本文详细介绍了某中心在对话式AI领域的技术突破,包括自然对话交互、自学习系统、多语言支持等核心能力,涵盖了语音识别、语义理解、隐私保护等关键技术模块的实现原理与应用场景。Alexa对话式AI技术进展 在疫情期间,…

AI小说生成器:智能创作与一致性维护的全流程解决方案

基于大语言模型的智能小说生成工具,提供从世界观构建到章节生成的全流程支持,通过向量检索和一致性检查确保剧情连贯性,助力创作者高效产出逻辑严谨的长篇故事。AI小说生成器 一款基于大语言模型的多功能小说生成器…

2025无锡考编培训机构权威推荐榜:专业辅导与高通过率口碑之

2025无锡考编培训机构权威推荐榜:专业辅导与高通过率口碑之选在当今就业竞争日益激烈的环境下,公务员和事业单位编制岗位因其稳定性与福利保障,成为众多求职者的首选目标。无锡作为长三角重要城市,其考编培训市场也…

脚本方式安装Python 特定版本

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClien…

数据结构-单向循环链表

数据结构-单向循环链表 /**************************************************************************** * @name* @author:王玉珩* @date:2025/10/07** *CopyRight (c) 2025-2026 All Rightt Reseverd* ***********…

论人工智能,对人类生产的影响。

接下来,我会说下,人工智能对人类的终极影响。这其中,最关键的影响因素是什么。 恐怖的进步速度! 我记得过年的时候,这个机器人还和帕金森一样转手绢。但是今天看,他已经可以后空翻,踩墙后空翻。而且,他的手基本…

2025高频超声波检测设备厂家权威推荐榜:精准检测与技术创新

2025高频超声波检测设备厂家权威推荐榜:精准检测与技术创新随着工业4.0时代的深入发展,高频超声波检测技术作为无损检测领域的重要组成部分,正迎来前所未有的发展机遇。在航空航天、轨道交通、能源电力等关键行业,…

HEU KMS Activator最新功能使用教程及介绍,附HEU KMS Activator最新版下载

说明 前半部分会以介绍为主,如果想直接学习怎么使用的前往下看。 什么是KMS? KMS,全称Key Management Service。 很多人可能不知道,KMS其实是微软官方认可的一种系统激活方式。这个激活方式主要用于企业计算机的批…

Codeforces Round 991 (Div. 3) vp 题解

Codeforces Round 991 (Div. 3) vp 题解Codeforces Round 991 (Div. 3) vp 题解 A 纯模拟,模拟一下就可以了。 B 呃,挺好发现的吧,每一次只能选择 i-1 和 i+1 这两个位置,就决定了这道题中,一个数组中只有同奇偶性…

PWN手的成长之路-14-ciscn_2019_c_1-ret2libc

file:checksec:查看 main 函数:再结合程序的运行,我们输入的值存到了 v4 中,当 v4=2 时,程序重新再次执行 begin() 函数,若输入 3,则直接退出程序,只有当我们输入 1 的时候,程序才会调用 encrypt() 函数。 查看…

国内高速下载镜像

文中方法非常好用,下载速度很快 1、项目介绍上次提及使用CNB下载镜像,有网友反应使用KSpeeder做加速也很香。但KSpeeder后续维护的稳定性肯定是没有自己使用CNB构建的稳定的。但是KSpeeder也是有自己的优势的,这个是…