redis的lua脚本解决高并发事务问题
2018-05-21 本文已影响0人
happyleijun
引言:"we may deprecate and finally remove transactions" and "everything you can do with a Redis transaction, you can also do with a script"
使用lua脚本的好处
1.lua脚本是作为一个整体执行的.所以中间不会被其他命令插入;
2.可以把多条命令一次性打包,所以可以有效减少网络开销;
3.lua脚本可以常驻在redis内存中,所以在使用的时候,可以直接拿来复用.也减少了代码量.
例子: 访问控制 ,10秒内最多访问3次.访问频率在10s内小于等于3次时返回1,否则返回0
local times = redis.call('incr',KEYS[1])
if times == 1 then
redis.call('expire',KEYS[1], ARGV[1])
end
if times > tonumber(ARGV[2]) then
return 0
end
return 1
执行方式:redis-cli -h 10.10.196.4 -p 7096 -a focus_redis --eval test.lua han1
其中,han1就是KYES[1], KYES和ARGV用逗号分割
ps:lua里面对于数组 for i,v in ipairs(t) do body end中,i就是数组下标,v就是对应的值,如果是table就是key和value。table.insert(targetTable, k, v)
lua中引入组件使用,local cjson = require "cjson",cjson.encode(数组或者table),cjson.decode(jsonstring)
抢红包例子:https://blog.csdn.net/hengyunabc/article/details/19433779/