Redis中的Lua脚本(五)

Lua脚本

脚本复制

复制EVALSHA命令

EVALSHA命令式所有与Lua脚本有关的命令中,复制操作最复杂的一个,因为主服务器与从服务器载入Lua脚本的情况可能有所不同,所以主服务器不能像复制EVAL命令、SCRIPT LOAD命令或者SCRIPT FLUSH命令那样,直接将EVALSHA命令传播给从服务器,对于一个在主服务器被成功执行的EVALSHA命令来说,相同的EVALSHA命令在从服务器执行时可能会出现脚本未找到(not found)错误。
举个例子。假设现在有一个主服务器master,如果客户端向主服务器发送命令:

127.0.0.1:6379> SCRIPT LOAD "return 'hello world'"
"5332031c6b470dc5a0dd9b4bf2030dea6d65de91"

那么在执行这个SCRIPT LOAD命令之后,SHA1值为5332031c6b470dc5a0dd9b4bf2030dea6d65de91的脚本
就存在于主服务器中了,现在假设一个从服务器slave1开始复制主服务器master,如果master不想办法将脚本:

"return 'hello world'"

传送给slave1载入的话,那么当客户端向主服务器发送命令:

127.0.0.1:6379> EVALSHA 
Redis中引入Lua脚本是为了满足某些特定场景下对原子性操作的需求。 Redis提供了丰富的指令集,但对于某些需要扩展的指令原子性执行的场景,仅使用原生命令无法满足需求。为了解决这个问题,Redis在2.6版本引入了Lua脚本功能。通过使用Lua语言编写脚本并传输到Redis中执行,可以实现以下好处: 1. 减少网络开销:通过将多个请求以脚本的形式一次性发送,可以减少网络时延。 2. 原子操作:Redis会将整个脚本作为一个整体执行,在执行过程中不会被其他请求插入。因此,无需担心出现竞态条件,也无需使用事务。 3. 复用:客户端发送的脚本会在Redis中永久存在,这样其他客户端可以复用该脚本,而无需使用代码完成相同的逻辑。 Redis官方命令参考:http://redisdoc.com/script/eval.html 《Redis设计与实现》-黄健宏著 掘金小册 -> Redis 深度历险:核心原理与应用实践<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Redis中使用Lua脚本(一)](https://blog.csdn.net/lpf463061655/article/details/98971806)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coffee_babe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值