使用Predis存储表单数据

时间:2013-10-14 17:32:14

标签: php redis predis

我尝试使用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数据类型吗?

1 个答案:

答案 0 :(得分:1)

使用lpush时出现错误,因为flavors密钥已存储了不同的Redis数据类型。因此,您应该在重试之前删除该密钥。

你也错误地使用了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);