3

スクリプトは私の MAC で動作します。これphpinfo()は、php redis サポート バージョンが次のとおりであることを示しています: Redis Version 2.2.5

PHPでの私のスクリプトは次のとおりです。

$script
    = "
        local count = redis.call('incr',KEYS[1])
        if tonumber(count) == 1 then
            redis.call('expire',KEYS[1],ARGV[1])
        end
        return count";

//$sha1_value = $this->conn->script('load', $script);
//var_dump($sha1_value);
if (FALSE === $this->conn->evalSha('e03b35e8ef29c5c746b1791ec7ae89e19f52156c', [
        $key,
        1800
    ], 1)
)
{
    $this->conn->eval($script, [
        $key,
        1800
    ], 1);
}

PHP の Redis バージョンが 2.1.0 のサーバーでスクリプトが機能しません。

問題は、プログラムが満たす$this->conn->script()か、$this->conn->evalSha()メソッドがプロセスを終了することです。これは非常に奇妙です。エラーログが出力されず、try ... catch ...方法を使用してコードを記述しても、例外メッセージも出力されないためです。

Redis の公式サイトを確認したところ、次のように書かれています。

EVAL and EVALSHA are used to evaluate scripts using the Lua interpreter built into Redis starting from version 2.6.0.( http://redis.io/commands/EVAL )

私のサーバーのredis-cliバージョンはすでに2.8.0で、私のMACは3.0.2であるため、興味があります。

では、どうすれば問題を見つけることができますか?

4

0 に答える 0