【问题标题】:Set multiple keys having multiple values to Redis将具有多个值的多个键设置为 Redis
【发布时间】:2018-12-08 19:41:07
【问题描述】:

我有一个 php 后端,使用 phpredis(redis 服务器的 php 客户端)将键值对存储到 Redis 服务器。我需要存储的数据是这种形式:

"key1" => "v1", "v2", "v3"
"key2" => "m1", "m2", "m3"
"key3" => "n1", "n2", "n3"
...

根据我的研究,我可以使用mset 命令在redis 中设置多个键,如下所示:

$redis->mSet(array('key0' => 'value0', 'key1' => 'value1'));

但我真正需要的是这样的:

$redis->mSet(array('key0' => array('v1','v2','v3') , 'key1' => array('m1', 'm2', 'm3')));

但这只是将每个键的值存储为“数组”,而不是指定的实际数组。

这是否可以通过像mset 这样的单个命令来完成,或者我是否需要迭代我的数据并使用像lPush 这样的东西分别设置每个键?

phpredis 文档:https://github.com/phpredis/phpredis

【问题讨论】:

  • @Mikey 这意味着我迭代我的数据并在每次迭代时执行以下操作: $redis->sAdd('key1' , 'v1', 'v2', 'v3'); , 是的?或者我可以以某种方式将它与 mset 之类的东西结合起来,并在一次操作中完成它?

标签: php caching redis


【解决方案1】:

因此,您可以使用sADD 来获得所需的功能,而不是使用mSet

$redis->sAdd($key, ...$data);

关于它的完整文档here

这意味着迭代并在多个步骤中执行,我建议阅读Redis Pipelines 和包含更多信息的非无耻插件link

看起来像;

$redis    = new Redis();
$pipeline = $redis->multi(Redis::PIPELINE);

foreach ($dataset as $data) {
    $pipeline->sAdd($data['key'], ...$data['values']);
}

$pipeline->exec();

我想不出一种方法可以在一个单一的操作中做到这一点,尽管比我更了解的人可能会出现:)


编辑: 看起来我误解了你的问题,因为它更专注于在单个操作中执行此操作。希望以上内容仍然有用,但据我所知,您必须使用多个来执行此操作。

【讨论】:

    猜你喜欢
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多