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 命令打印变量
注意
- redis lua脚本不允许使用全局变量 只能local本地变量
- Window 系统上安装 Lua :https://github.com/rjpcomputing/luaforwindows/releases