这是2015年的更新答案。
如果您可以将 Redis 升级到 2.8 以上,带有 MATCH 的 SCAN 命令将适用于此。在那个版本之前,没有那么多,除了在开发环境中,不要使用 KEYS 命令。
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 的说明:
- 在此处下载 2.2.7 包:http: //pecl.php.net/package/redis
$ php -i | grep Redis
Redis Support => enabled
Redis Version => 2.2.4
- 按照 README 中的说明进行 phpize、配置、安装
- 为命令行 cli 包创建符号链接:
cd /etc/php5/cli/conf.d && sudo ln -s ../../mods-available/redis.ini 20-redis.ini
$ php -i | grep Redis
Redis Support => enabled
Redis Version => 2.2.7