笔记【普通命令、管道命令、事务命令及lua脚本命令的区别】

命令说明

  1. 普通命令:只多个原生命令的执行。
  2. 管道命令:在Redis提供的管道流中多个原生命令一次性发送,并在所有命令执行完一次性获取执行结果(使用限制:多个命令之间不存在返回结果上的依赖)。
  3. 事务命令:开启事务后执行命令(使用限制:多个命令之间不存在返回结果上的依赖)。
  4. lua脚本命令:以lua脚本粘合多个原生命令,作为一个整体发送到服务器端执行。

执行流程

  • 以下为普通、管道、事务类型命令执行流程的对比图:
    执行过程示意图
  1. 普通命令:命令->结果、命令->结果;命令会被立即执行,命令与结果之间客户端阻塞,两次命令之间会被其它客户端插入。

  2. 管道命令:命令->结果缓存、命令->结果缓存,返回结果集合;命令会被立即执行,两次命令之间会被其它客户端插入,见过一次性返回(减少了多次网络传输成本,但是缓存结果会占用服务端的内存资源)。

  3. 事务命令:命令缓存、命令缓存、执行->返回结果;两次命令缓存之间会被其它客户端插入,执行期间不会被插入。

结果对比

优势
  • 相比其它命令,lua脚本命令的优势:
  1. 减少网络开销 :本来5次网络请求的操作,可以用一个请求完成,原先5次请求的逻辑放在redis服务器上完成。使用脚本,减少了网络往返时延。这点跟管道类似。
  2. 原子操作 :Redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。管道不是原子的,不过redis的批量操作命令(类似mset)是原子的。
  3. 替代redis的事务功能 :redis自带的事务功能很鸡肋,报错不支持回滚,而redis的lua脚本几乎实现了常规的事务功能,支持报错回滚操作,官方推荐如果要使用redis的事务功能可以用redis lua替代。
  4. 复用 :客户端发送的脚本永久存在redis中,其他客户端可以复用脚本
  5. 可嵌入性 :可嵌入JAVA,C#等多种编程语言,支持不同操作系统跨平台交互
劣势
  1. 需要学习lua脚本语法
注意
  • 不要在Lua脚本中出现死循环和耗时的运算,否则redis会阻塞,将不接受其他的命令, 所以使用时要注意不能出现死循环、耗时的运算。redis是单进程、单线程执行脚本。管道不会阻塞redis。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值