通过在Redis的有序集合使用部分密钥名称查找值(Finding values by using p

2019-08-18 01:59发布

我有一个排序的一套具有下面的项名称和值:

zrange bargraph:branch:1:category:2:product:4
1) "76"
2) "55"
3) "10"
4) "84"

是否有redis的一个机制,我可以使用通配符(可能的?)使用zrange时,仍然得到同样的价值? 换句话说,不支持Redis的光柱zrange:分支:1:类别:2? 如果不是,如何善用我得到的所有的值,如果我只知道类别ID(2),而不是产品ID(4)不使用不同的有序集合?

Answer 1:

正如你所提到的,钥匙是低效的,因为引擎对键的线性扫描。 不幸的是,没有通配符的解决方案,如您正在寻找

请考虑使用SET每类产品密钥:

SADD bargraph:branch:1:category:2 1 2 3 4

获取所有集合类成员做到:

SMEMBERS bargraph:branch:1:category:2

如果你不关心你的总结成绩,或者有每有序集合不同的项目,你可以做你的每个产品分类套这样的联合:

ZUNIONSTORE bargraph:branch:1:category:2:product:all 4 bargraph:branch:1:category:2:product1 bargraph:branch:1:category:2:product2 bargraph:branch:1:category:2:product3 bargraph:branch:1:category:2:product4

现在你可以zrange bargraph:branch:1:category:2:product:all

您管道获得更好的性能上述操作



Answer 2:

下面是2015年更新的答案。

如果你可以升级Redis的2.8以上,与之相匹配的扫描命令将用于这方面的工作。 该版本之前,没有那么多,并且不使用除了在开发环境中的关键命令。

http://redis.io/commands/scan

实施例上的命令行:

$ redis-cli
127.0.0.1:6379> scan 0 match V3.0:*
1) "0"
2) 1) "V3.0:UNITTEST55660BC7E0C5B"
   2) "V3.0:shop.domain.com:route"
   3) "V3.0:UNITTEST55660BC4A2548"
127.0.0.1:6379> scan 0 match V1.0:*
1) "0"
2) (empty list or set)
127.0.0.1:6379> scan 0 match V3.0:*
1) "0"
2) 1) "V3.0:UNITTEST55660BC7E0C5B"
   2) "V3.0:shop.domain.com:route"
   3) "V3.0:UNITTEST55660BC4A2548"

例如在PHP中:

// Initialize our iterator to NULL
$iterate = null;

// retry when we get no keys back
$redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY);

while ($arr_keys = $redis->scan($iterate, 'match:*')) {
    foreach ($arr_keys as $str_key) {
        echo "Here is a key: $str_key\n";
    }
    echo "No more keys to scan!\n";
}

注意,PHP代码没有进行测试,并从核心文档,例如在这里。 生产代码将需要根据查找所需的键进行修改。

对于那些在Ubuntu这里有升级PHP5,Redis的说明:

  1. 点击此处下载2.2.7包: http://pecl.php.net/package/redis
  2. $ php -i | grep Redis Redis Support => enabled Redis Version => 2.2.4
  3. 按照README的说明phpize,配置,使安装
  4. 创建用于命令行CLI包一个符号链接: cd /etc/php5/cli/conf.d && sudo ln -s ../../mods-available/redis.ini 20-redis.ini
  5. $ php -i | grep Redis Redis Support => enabled Redis Version => 2.2.7


文章来源: Finding values by using partial key name in a Redis Sorted Set
标签: redis