php - 使用 Predis 存储表单数据

标签 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 数据类型?

最佳答案

您在使用 lpush 时遇到该错误,因为 flavors 键已经存储为不同的 Redis 数据类型。因此,您应该在重试之前删除该 key 。

您还以错误的方式使用了lpush。你应该试试这个:

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

或者如果你的 redis api 支持多参数:

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

如果你想通过 mainid 存储 flavors,你可能想用多键存储它并使用 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);

关于php - 使用 Predis 存储表单数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19365826/

相关文章:

php - Predis 能否与更新的 Redis 版本交互?

php - 使用 ajax 提交表单时刷新 csrf token 是个好主意吗?

python - 在 python3 而不是 python 2 中安装 redis 模块

php - Symfony 表单事件向特定字段添加错误

Redis 开发环境设置

mysql - Redis 不应该缓存数据库条目吗?

mysql - 将 MySQL 中的主键映射到 Redis

php - 在redis中存储大量数据时内存不足

php - mysql_fetch_array() 总是返回 null

php - Javascript SQL 攻击 : Someone inserted a script into MySQL that prevented me from deleting their row. 我在这里有什么风险?