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

embedded/2025/1/21 11:05:09/

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.ppmy.cn/embedded/155757.html

相关文章

PHP语言的语法糖

PHP语言的语法糖 引言 在现代编程语言中,语法糖(Syntactic Sugar)是指一些改善用户体验的语言特性,使得某些语法更加简洁、易用。PHP作为一种广泛使用的服务器端脚本语言,自然也不例外。它大量引入了语法糖&#xff…

gitlab使用多数据库

1. 说明 默认情况下,GitLab 使用一个单一的应用数据库,称为主数据库。为了扩展 GitLab,您可以将 GitLab 配置为使用多个应用数据库。 设置多个数据库后,GitLab 将使用第二个应用数据库用于 CI/CD 功能,称为 CI 数据库…

Linux:生产者消费者模型

一、普通生产者消费者模型 1.1 什么是生产者消费者模型 现实生活中,我们也会有像生物世界的生产者和消费者的概念,但是我们的消费者在大多数情况下并不和生产者直接联系,就比如说食物,不能说我今天去找供货商要十个面包&#xff…

作品显示ip属地与定位哪个是真实的

在数字化时代,随着社交媒体的普及和网络内容的多样化,我们经常在各类平台上看到作品(如图片、视频、文章等)附带IP属地或定位信息。这些信息似乎都在告诉我们作品的来源地,但究竟哪个是真实的?IP属地与定位…

web-view环境下,H5页面打开其他小程序

在Web-view环境下,H5页面无法直接打开其他小程序。正确的实现方式是先从H5页面跳转回当前小程序,再由当前小程序跳转到目标小程序。具体实现方法如下: H5页面跳转回小程序时,调用wx.miniProgram.navigateTo()方法。 小程序跳转到…

深入理解Linux系统内存中文件结构以及缓冲区,模拟实现c语言库文件接口

目录 一、文件的理解 二、文件操作 1.Linux系统中文件接口: 1.1.open 1.2.write 1.3.read 三、文件描述符 四、重定向的理解 五、缓冲区 1.语言层缓冲区 2.系统层缓冲区 3.缓冲区刷新策略(语言层) 六、c文件接口的模拟实现 1.m…

算法妙妙屋-------2..回溯的奇妙律动

回溯算法是一种用于系统性地搜索和解决问题的算法,它以深度优先搜索(DFS)为基础,用来探索所有可能的解决方案。通过递归地尝试候选解并在必要时回退(即“回溯”),它能够高效地解决许多涉及组合、…

MySQL中的GROUP_CONCAT函数将分组后的多个行值合并成一个字符串,并用指定分隔符连接

文章目录 前言什么是GROUP_CONCAT?基本语法 使用示例示例1: 基本用法示例2: 去重并排序 高级应用应用场景示例注意事项 结论表结构1. Orders 表 (订单表)2. Order_Details 表 (订单详情表) 示例数据Orders 表的数据Order_Details 表的数据 使用 GROUP_CONCAT 的查询…