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

redis.call()和redis.pcall()的区别

redis.call() 与 redis.pcall()很类似, 他们唯一的区别是当redis命令执行结果返回错误时, redis.call()将返回给调用者一个错误,而redis.pcall()会将捕获的错误以Lua表的形式返回

redis.call() 和 redis.pcall() 两个函数的参数可以是任意的 Redis 命令:

eval "return redis.call('set','foo','bar')" 0
OK

需要注意的是,上面这段脚本的确实现了将键 foo 的值设为 bar 的目的,但是,它违反了 EVAL 命令的语义,因为脚本里使用的所有都应该由 KEYS 数组来传递,就像这样:

eval "return redis.call('set',KEYS[1],'bar')" 1 foo
OK

要求使用正确的形式来传递键(key)是有原因的,因为不仅仅是 EVAL 这个命令,所有的 Redis 命令,在执行之前都会被分析,籍此来确定命令会对哪些键进行操作。

因此,对于 EVAL 命令来说,必须使用正确的形式来传递键,才能确保分析工作正确地执行

除此之外,使用正确的形式来传递键还有很多其他好处,它的一个特别重要的用途就是确保 Redis 集群可以将你的请求发送到正确的集群节点。 (对 Redis 集群的工作还在进行当中,但是脚本功能被设计成可以与集群功能保持兼容。)不过,这条规矩并不是强制性的, 从而使得用户有机会滥用(abuse) Redis 单实例配置(single instance configuration),代价是这样写出的脚本不能被 Redis 集群所兼容。

来自redis 的官方解释,详细请看http://www.redis.cn/commands/eval.html

最后编辑于:2025-01-11 21:07:57


喜欢的朋友记得点赞、收藏、关注哦!!!


http://www.kler.cn/a/508806.html

相关文章:

  • mysql8.0 重要指标参数介绍
  • 【机器学习实战】kaggle 欺诈检测---使用生成对抗网络(GAN)解决欺诈数据中正负样本极度不平衡问题
  • 分频器code
  • Redis系列之底层数据结构字典Dict
  • 【python】实现图像中的阴影去除 | 方案和代码
  • Java21 正则表达式
  • uniapp 微信小程序 editor 富文本编辑器
  • SpringBoot中Get请求和POST请求接收参数详解
  • STM32--定时器输出pwm知识点_stm32 pwm-CSDN博客
  • Python毕业设计选题:基于django+vue的智能租房系统的设计与实现
  • 彩色图像面积计算一般方法及MATLAB实现
  • 电脑换固态硬盘
  • 瑞芯微开发板/主板Android配置APK默认开启性能模式方法
  • Cursor新建远程分支后,更新到本地,一步到位
  • [Linux] linux 系统中如何添加自动启动程序
  • nssctf_WEB部分题解
  • 嵌入式杂谈——什么是DMA?有什么用?
  • .netframwork模拟启动webapi服务并编写对应api接口
  • springboot集成websocket实现实时大量数据,效率性能高
  • 【JavaEE进阶】实现简单的加法计算器和用户登录
  • 大模型技术的风险与挑战概述
  • 通过 API 开发实现淘宝链接解析并获取商品详情信息字段
  • Scrapy-Redis分布式爬虫
  • 2024年12月蓝桥杯Scratch12月stema选拔赛真题试卷
  • skywalking的使用
  • 【客观对比】激光雷达 vs 纯视觉方案:汽车自动驾驶的两种路径