【问题标题】:Blocking lua script redis or not?是否阻止lua脚本redis?
【发布时间】:2018-01-15 00:35:22
【问题描述】:

我对 redis 4 使用简单的 lua 脚本:

        local result = {}
        local vcounters = redis.call( "zrange", "vcounters::"..date, 0, -1, "withscores" )
        local i = 1
        while i < #vcounters do
            local vid = vcounters[i]
            if result[vid] == nil  then result[vid] = 0 end
            result[vid] = result[vid] + 
            (redis.call("scard", "vcounters::"..date.."::session::"..vid) or 0)
            i = i + 2
        end
        return cjson.encode(result)

它是来自客户端脚本的替代 zrange/scard 命令,运行速度快 4-5 倍。但是这个脚本会阻止 zadd 命令吗?

【问题讨论】:

    标签: redis


    【解决方案1】:

    是的,当脚本运行时,不会执行其他数据库命令(它们必须wait until it is done)。

    从好的方面来说,如果您需要它是原子的,脚本也不会与并发数据库更新交错(而从客户端发出的单个命令可能会与来自其他客户端的命令混合)。

    【讨论】:

    • 附带说明 - 切勿在脚本中编码或生成键名。始终通过内置的KEYS[] Lua 表将它们作为输入传递。
    猜你喜欢
    • 2012-06-30
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 2021-04-03
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多