redis -- Lua

  1. Lua  http://www.lua.org/
  1. lua脚本是作为一个整体执行的.所以中间不会被其他命令插入(隔离性);
  2. 可以把多条命令一次性打包,所以可以有效减少网络开销;
  3. lua脚本可以常驻在redis内存中,所以在使用的时候,可以直接拿来复用.也减少了代码量.

 

EVAL命令。例如:eval "return redis.call('set',KEYS[1],ARGV[1])" 1 company_name xiaobu 

 = (set company_name xiaobu)

 

在Worker接收到消息时,尝试先从redis缓存中根据消息的ID获取值,有以下两种情况:

Compare and set :  就是在执行get和set命令时,没有保持原子性操作,导致其他命令有机可趁,那是不是可以把get和set命令当成一整个部分执行,不让其他命令插入执行呢?

 

eval "if redis.call('get', KEYS[1]) == false then redis.call('set', KEYS[1], ARGV[1]) return 0 else return 1 end" 1 msg_push_1 "1"

 

  1. - redis.call("命令名称",参数1,参数2...) :执行指定的redis指令,执行遇到错误会直接返回错误
  2. - redis.pcall("命令名称",参数1,参数2) :执行指定的redis指令,执行遇到错误以lua表的形式返回。
    1. 执行脚本文件和缓存脚本

SCRIPT LOAD script

EVALSHA sha1 numkeys key [key ...] arg [arg ...]

 

Redis 还支持直接执行 Lua 脚本文件。首先编写并存储一个 Lua 脚本。

Redis-cli –eval 命令语法基本与原 eval 语法相同。

说的很好的文章推荐:https://www.infoq.cn/article/oThycBmhGbLWOaSb4XvA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值