redis lua 脚本使用

lua 教程
http://www.runoob.com/lua/lua-tutorial.html

lua redis 教程
深入理解redis.pdf 第五章

一段记榜的脚本

zaddIfNotExistsOrGtPreVal.lua

版本一:

for k, v in ipairs(KEYS)
do
    local prescore = redis.call('ZSCORE', v, ARGV[1])
    if prescore == false or prescore < ARGV[k + 1] then
        redis.call('ZADD', v, ARGV[k + 1], ARGV[1])
    end
end

遇到问题: 发现 执行到 prescore < ARGV[k + 1] 两个字符串 比较有问题 比如: prescore = “9450” ARGV[k + 1] = “2312029” 然而: prescore < ARGV[k + 1] 返回false

然后我改为了第二版,修复该问题

版本二:

for k, v in ipairs(KEYS)
do
    local prescore = redis.call('ZSCORE', v, ARGV[1])
    if prescore == false or prescore - ARGV[k + 1] < 0 then
        redis.call('ZADD', v, ARGV[k + 1], ARGV[1])
    end
end

改为减法运算符 字符串会换位 number 运算。

脚本说明:

目的是为了执行zadd key score member 但是必须 比原来值大才执行, 或者原来不存在才执行zadd。

redis luna 脚本调试

redis-cli -h 192.168.41.46 -p 6380 --ldb --eval zaddIfNotExistsOrGtPreVal.lua travel_city:anchorRank travel_city:anchorRank:2018-10-09 , 20919832 37810 37810

keys 和argv 之间 用 逗号 隔开 注意 逗号前后 需要空格

下一步输入 step 命令
然后可以使用print 命令打印变量

注意

  1. redis lua脚本不允许使用全局变量 只能local本地变量
  2. Window 系统上安装 Lua :https://github.com/rjpcomputing/luaforwindows/releases
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值