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