【问题标题】:Using Predis to store form data使用 Predis 存储表单数据
【发布时间】:2013-10-14 17:32:14
【问题描述】:

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

【问题讨论】:

    标签: php redis predis


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-25
      • 2016-01-18
      • 1970-01-01
      • 2020-10-20
      相关资源
      最近更新 更多