Redis中lua脚本和pipeline的区别

一、lua脚本

一般我会用lua脚本来代替。

官方默认lua脚本是原子性的,应该是和MySQL的原子行差不多的。

lua脚本的所有命令要么全部执行成功要么全部执行失败。

一般是做一些逻辑比较严密的处理。

阻塞其他redis操作,直到lua脚本完全执行完毕才会执行其他命令。

我认为lua可以执行批量处理

如果lua脚本执行的时间太长,那么要优化下lua脚本,因为lua会阻塞其他操作,所以说lua脚本不适合执行太长时间。

三、pipeline

1、批量处理数据,一次性返回所有结果集。就可以对这个结果集进行处理,考验处理结果集的能力。

一个pipeline的命令集被redis服务器执行的时候,有可能redis服务器会执行其他客户端传来的redis命令。

一些异常情况尽可能发生,所以说使用pipeline一般会做一些异常捕获和处理。

pipeline是顺序执行的吗
  • pipeline缓冲的指令发送到服务器端时,本身是按照指令缓冲的顺序执行,因为缓冲指令是使用队列的方式实现的,但是缓冲指令中间可能会穿插其他客户端发送来的命令

Pipeline 的优点:

批量操作:Pipeline 适用于需要批量执行多个命令的场景,通过一次性发送多个命令,减少了客户端与服务器之间的通信次数。

提升吞吐量:Pipeline 可以在一次请求中发送多个命令,减少了网络延迟时间,提高了性能。

简单易用:使用 Java 客户端的 Pipeline API 相对简单,易于理解和维护。

Pipeline 的缺点:

无回滚机制:Pipeline 无法保证所有命令都执行成功,需要手动检查每个命令的执行结果。

Lua 脚本的优点:

复杂计算处理:Lua 脚本可以编写复杂的逻辑,结合 Redis 的数据结构和操作,实现更灵活和强大的功能。

原子性操作:Lua 脚本执行是原子性的,可以保证多个命令在一个单独的 Lua 脚本中依次执行,确保操作的原子性。

Lua 脚本的缺点:

学习和编写成本:Lua 脚本相对于 Java 代码来说,需要学习新的语法和规则,在编写和调试方面有一定的门槛。

可读性和可维护性:Lua 脚本相对于 Java 代码来说,可读性和可维护性较低,不容易理解和修改。

根据场景的不同,可以根据以下几个维度进行选择:

批量操作和提升吞吐量:如果需要批量执行多个命令和提升系统的吞吐量,建议使用 Pipeline。

复杂计算和业务逻辑:如果需要进行复杂的计算和处理,建议使用 Lua 脚本。

通常情况下,Pipeline 和 Lua 脚本可以结合使用,根据具体要求和场景选择适合的方法。

原文链接:

https://blog.csdn.net/ws_please/article/details/131623599

https://blog.51cto.com/u_16213689/7240017

相关推荐
没有气的汽水3 小时前
一次生产 Redis 内存打满的排查、清理和复盘
redis
hey you~3 小时前
云呼叫中心坐席自动分配实战:ACD 策略、Redis+Lua 实现与排查清单
数据库·redis·lua·云呼叫中心·acd·坐席分配·坐席状态机
我不会起名字3225 小时前
Redis pipeline 用了反而更慢:3 类误用与正确的批量姿势
redis·pipeline·lua·rtt·批量
Tsuki_tl5 小时前
【总结】Redis五大数据类型应用场景及基本命令
数据库·redis·后端·缓存·缓存中间件·redis命令·redis 五大数据类型
代码丰20 小时前
大 JSON 放进 Redis 之后,如何用 Stream 解耦耗时任务?
redis·后端·系统架构
枫子有风1 天前
卡码网盘项目深挖
java·redis·jwt·es·pgvector
福大大架构师每日一题1 天前
redis 8.10.3正式发布:聚焦集群总线超大消息传播场景的安全修复,8.10.3 Latest更新解读
数据库·redis·安全
江屿风1 天前
【Plain Language Large Model】【从麦当劳点餐到Redis接入:MCP如何让AI工具集成变简单】流食般投喂
人工智能·redis·笔记·语言模型·llm·mcp
码智社1 天前
Redis 哨兵模式详解:从原理到生产实践
java·redis
努力努力再努力wz1 天前
【Lua入门系列】从 C++ 迭代器到 Lua 迭代器:一文深入理解 Lua 有状态以及无状态迭代器与泛型for、闭包、ipairs、pairs 和 next
开发语言·c++·lua