5

既に保存されている 2 つのキー (XXX_COUNT と XXX_TOTAL) の除算の結果を返すか、いずれかのキーが存在しない場合は 0 を返す LUA スクリプトを redis で作成しています。スクリプトのコードは次のとおりです。

    local count = redis.call("GET", KEYS[1]..'_COUNT')
    local total = redis.call("GET", KEYS[1]..'_TOTAL')
    if not count or not total then
        return 0
    else
        return tonumber(total)/tonumber(count)
    end

問題は、スクリプトが "tonumber(total)/tonumber(count)" を返すとき、その値は常に 0 であり、すでにキーをチェックしており、redis に文字列として格納されているゼロ以外の値があることです。このスクリプトの何が問題になっていますか?

前もって感謝します!

4

1 に答える 1

5

解決策を見つけました。結果を返す前に文字列に変換する必要がありました。

    local count = redis.call("GET", KEYS[1]..'_COUNT')
    local total = redis.call("GET", KEYS[1]..'_TOTAL')
    if not count or not total then
        return 0
    else
        local avg = tonumber(total)/tonumber(count)
        return tostring(avg)
    end

それが誰かに役立つことを願っています!

于 2013-04-03T17:25:53.563 に答える