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

面试官:Redis执行lua脚本能保证原子性吗?

核心问题

  • Redis执行lua脚本是否能确保原子性?

面试经历

  • 面试者在面试中自信回答Redis执行lua脚本能保证原子性,但未能深入解释原因。

原子性概念

  • 原子性:一个事务的所有命令要么全部执行成功,要么全部执行失败。

Redis官方说明

  • Redis在执行lua脚本期间,会阻塞所有客户端操作,确保不会有其他命令插入执行。
  • 官方定义中并未明确包含原子性。

实验验证

  1. 编写并执行一个简单的lua脚本,包括对变量a的赋值和对字符串b的加法运算。
  2. 预设Redis中key a的值为1。
  3. 执行lua脚本,脚本中对b进行加法运算时出现异常。
  4. 检查a的值,发现已更新为2,说明没有执行回滚操作。

结论

  • Redis执行lua脚本不能保证原子性。
  • lua脚本能保证在执行期间不会有其他客户端命令干扰,但不支持回滚。

Redis事务与lua脚本的比较

  • Redis事务:

    • 客户端发送MULTI命令后,每个命令请求被记录到事务队列。
    • 执行EXEC命令时,按顺序执行事务队列中的命令。
    • 每个命令都需要与Redis服务端进行交互,涉及多次网络IO操作。
  • lua脚本:

    • 客户端发送一次请求,由Redis服务端执行脚本。
    • 只需一次网络IO操作。
    • 可以定义更复杂的业务逻辑,如变量运算、复杂判断等。

推荐使用lua脚本的原因

  • 执行效率更高,减少网络IO操作。
  • 支持更复杂的业务逻辑。

集群架构下的原子性问题

  • 单机架构:lua脚本能保证原子性。
  • 分片集群架构:不同key可能映射到不同主节点,无法保证原子性。
http://www.lryc.cn/news/392057.html

相关文章:

  • 基于Chrome扩展的浏览器可信事件与网页离线PDF导出
  • 马拉松报名小程序的设计
  • python使用pywebview集成vue3和element-plus开发桌面系统框架
  • C++线程的使用
  • 算法库应用--寻找最长麦穗
  • ython 使用 cx_Freeze 打包,不想要打包文件中能直接看到依赖的代码,如何处理
  • 某DingTalk企典 - Token
  • 手写一个类似@RequestParam的注解(用来接收请求体的参数)
  • 【遇坑笔记】Node.js 开发环境与配置 Visual Studio Code
  • 【ajax实战07】文章筛选功能
  • promise.all和promise.race的区别
  • Python爬取豆瓣电影+数据可视化,爬虫教程!
  • 初阶数据结构二叉树练习系列(1)
  • 【selenium 】操作元素
  • 【MySQL】事务实现原理
  • 面向物联网行业的异常监控追踪技术解决方案:技术革新与运维保障
  • 守护厨房空气:全面排查与修复油烟净化器跳闸问题
  • 【微服务网关——https与http2代理实现】
  • mssql查询历史执行过的语句日志
  • 【LeetCode】每日一题:买卖股票的最佳时机 II
  • 【TS】TypeScript 联合类型详解:解锁更灵活的类型系统
  • kali改回官方源后更新失败
  • Mysql 左关联(LEFT JOIN)
  • [笔记]小米CyberDog机器狗仿真调试记录
  • 第十四届蓝桥杯省赛C++B组G题【子串简写】题解(AC)
  • 实现Java Web应用的高性能负载均衡方案
  • 医学预测模型web APP的制作建议
  • gitlab每日备份以及restore
  • 2024-07-05 base SAS programming学习笔记9(variables)
  • kafka--发布-订阅消息系统