読者です 読者をやめる 読者になる 読者になる

PhpRedisのlists, sets関数にハマった話

Redis PHP

PhpRedisとRedis 1.2.6で、

<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
if ($redis->rPush('php', 'sucks')) {
  // do someting
}

のようなコードを書こうとしたら、rPushがfalseを返してきて困った。rPushだけではなく、lists, setsの操作メソッドは軒並み駄目。しかし、値が設定できていないわけではなく、値は設定されているのにfalseが返ってくるという状況。なにこれ、キモい。

同じサーバーに対してredis-cliや、Pythonのクライアント・ライブラリを使えばちゃんとアクセスできる。

なんだろうと思って、RedisをGoogle Codeにあるバージョン1.2.6ではなく、githubにあるバージョン1.3.10に変えてみたら、最低限動くようになった。

が、ドキュメントはtrue/falseを返すと言っているのに、成功時に返ってくるのはint型の1。

良かれと思って、

<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
if ($redis->rPush('php', 'sucks') === true) {
  // do someting
}

のように===で結果を判定していると大変面倒なことになりそうなのは、さすがPHPクオリティですね。