美文网首页我爱编程
redis的lua脚本解决高并发事务问题

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

作者: happyleijun | 来源:发表于2018-05-21 23:49 被阅读0次

    引言:"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脚本解决高并发事务问题

        本文链接:https://www.haomeiwen.com/subject/ustcjftx.html