1

使ってみたlpush

$list = "flavors";
$array = array($_GET["mainid"], $_GET["flavor1"], $_GET["flavor2"], $_GET["flavor3"]);
$redis = new Predis\Client();
$redis->lpush($list,implode("", $array));
echo $redis->lrange(0, -1);

使ってみましたhset

$redis->hset("flavors", $_GET["mainid"], $_GET["mainid"]);
$redis->hset("flavors", $_GET['mainid'] . "flavor1", $_GET["flavor1"]);
$redis->hset("flavors", $_GET['mainid'] . "flavor2", $_GET["flavor2"]);
$redis->hset("flavors", $_GET['mainid'] . "flavor3", $_GET["flavor3"]);
echo $redis->hgetall($_GET['mainid']);

しかし、次のエラーが発生するため、それを機能させることができません: http://pastie.org/8401717

どうすれば修正できますか?文字列が必要なときに配列が与えられることについての何かだと思いますがimplode、そこにあるのに、それ以外に機能しないのはなぜですか? まったく機能しない場合、他のどの Redis データ型を使用できますか?

4

1 に答える 1

1

キーが別の Redis データ型で既に保存されているlpushため、使用時にそのエラーが発生しました。flavorsそのため、再試行する前にそのキーを削除する必要があります。

あなたもlpush間違った方法で使用しました。これを試してください:

foreach ($array as $value) {
    $redis->lpush($list, $value);
}

または、redis api が複数のパラメータをサポートしている場合:

call_user_func_array(array($redis, 'lpush'), array_merge($list, $array));

フレーバーをmainidで保存したい場合は、複数のキーを使用して保存することをお勧めしますlpush:

$list = "flavor:{$_GET['mainid']}";
$redis->lpush($list, $_GET["flavor1"]);
$redis->lpush($list, $_GET["flavor2"]);
$redis->lpush($list, $_GET["flavor3"]);

別の方法は、単一のハッシュに保存し、json_encode を使用することです (implode を使用しないでください)。

$data = json_encode(array($_GET["flavor1"], $_GET["flavor2"], $_GET["flavor3"]));
$redis->hset('flavors', $_GET["mainid"], $data);
于 2013-10-14T17:43:15.503 に答える