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

lua脚本在redis中执行是否是原子性?

lua脚本在redis中执行是否是原子性?

以及是否会阻塞其他脚本的执行【客户端的请求】?

先解答第二个问题:

是的,保持原子执行。这也是redis中支持lua脚本执行的原因。

Lua 脚本在 Redis 中是以原子方式执行的,在 Redis 服务器执行EVAL命令时,在命令执行完毕并向调用者返回结果之前,只会执行当前命令指定的 Lua 脚本包含的所有逻辑,其它客户端发送的命令将被阻塞,直到EVAL命令执行完毕为止。因此 LUA 脚本不宜编写一些过于复杂了逻辑,必须尽量保证 Lua 脚本的效率,否则会影响其它客户端。

Redis 提供了丰富的命令来供我们使用以实现一些计算。Redis 的单个命令都是原子性的,有时候我们希望能够组合多个 Redis 命令,并让这个组合也能够原子性的执行,甚至可以重复使用。Redis 开发者意识到这种场景还是很普遍的,就在 2.6 版本中引入了一个特性来解决这个问题,这就是 Redis 执行 Lua 脚本。

lua脚本是否在redis主线程中执行?

在 Redis 中,Lua 脚本的执行是在主线程中进行的。当客户端发送 Lua 脚本到 Redis 服务器时,Redis 会将脚本解析并编译成字节码,并将其存储在服务器内部的脚本缓存中。当客户端再次执行同一个脚本时,Redis 可以直接使用缓存中的字节码来执行脚本,从而避免了重复解析和编译的开销。

因为 Lua 脚本是在 Redis 主线程中执行的,所以执行较长时间的脚本可能会导致阻塞其他客户端请求的执行。为了避免这种情况,可以将一些长时间执行的操作拆分成多个步骤,使用 Redis 的 Lua 脚本执行和服务器端脚本缓存来优化脚本的性能。同时,还可以使用 Redis 的任务队列或消息队列来将长时间执行的操作移动到后台处理,从而避免阻塞主线程并提高系统的并发性能。

了解了上面这些知识基本上可以满足开发一些简单的 Lua 脚本了。但是实际开发中还是有一些要点的。

  • 务必对 Lua 脚本进行全面测试以保证其逻辑的健壮性,当 Lua 脚本遇到异常时,已经执行过的逻辑是不会回滚的。【如果是redis本身自带支持的命令呢?都是原子性的,也就是只会存在两种状态,成功or失败】
  • 尽量不使用 Lua 提供的具有随机性的函数,参见相关官方文档。
  • 在 Lua 脚本中不要编写function函数, 整个脚本作为一个函数的函数体。
  • 在脚本编写中声明的变量全部使用local关键字。
  • 在集群中使用 Lua 脚本要确保逻辑中所有的key分到相同机器,也就是同一个插槽(slot)中,可采用Redis Hash Tag技术。
  • 再次重申 Lua 脚本一定不要包含过于耗时、过于复杂的逻辑。(否则将导致redis宕机, 影响所有使用到redis的服务)
    http://www.xdnf.cn/news/19605.html

    相关文章:

  • Java反序列化漏洞揭秘:从原理到攻击实战
  • RT-DETR模型训练中断,接着训练的方法
  • 单片机day1
  • DevExpress WPF中文教程:如何将WPF数据网格绑定到本地数据库?
  • MyBatis:让 SQL 与代码和谐共处的持久层框架
  • Windows 和 Linux 服务器 IP 与域名强制绑定方法
  • Python上下文管理器:资源管理的隐形守护者
  • 灵神题单之链表、树
  • k8s的CRD自定义资源类型示例
  • 整体认识K8s之PriorityClass优先级调度/HPA自动扩缩容机制
  • 【设计模式】从游戏角度开始了解设计模式 --- 创建型模式(一)
  • 【Linux系统】万字解析,进程间的信号
  • Photoshop用户必看:让你的PSD像JPG一样可预览
  • 书写腾讯天气遇到的问题
  • 虚拟继承:破解菱形继承之谜
  • 【论文阅读】Deepseek-VL:走向现实世界的视觉语言理解
  • Postman接口测试工具:高效管理测试用例与环境变量,支持断言验证及团队协作同步
  • 软件设计师——软件工程学习笔记
  • 前端架构知识体系:常见压缩算法全解析及原理揭秘(gzip、zip)
  • 麒麟信安受邀出席第三届电子信息测试产业大会,参编四项团标发布,详解麒麟信安操作系统测试全流程
  • Navicat vs DBeaver vs DataGrip:三款主流数据库客户端深度对比与选择
  • 力扣222 代码随想录Day15 第四题
  • 【高并发内存池】三、线程缓存的设计
  • Steam开发者上架游戏完整指南(含具体技术细节)
  • 【最新Pr 2025安装包(Adobe Premiere Pro 2025 中文解锁版)安装包永久免费版下载安装教程】
  • Java-Spring入门指南(一)Spring简介
  • 如何把HTML转化成桌面Electron
  • B树和B+树,聚簇索引和非聚簇索引
  • 网络准入控制,阻断违规外联-企业内网安全的第一道防线
  • 通用的二叉数迭代方法