スクリプトは私の 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であるため、興味があります。
では、どうすれば問題を見つけることができますか?