redis的lua脚本解决高并发事务问题

引言:"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/

你可能感兴趣的:(redis的lua脚本解决高并发事务问题)