Đây là câu trả lời được cập nhật cho năm 2015.
Nếu bạn có thể nâng cấp Redis trên 2.8, lệnh SCAN với MATCH sẽ hoạt động cho việc này. Trước phiên bản đó, không quá nhiều và KHÔNG sử dụng lệnh KEYS ngoại trừ trong môi trường phát triển.
http://redis.io/commands/scan
Ví dụ trên dòng lệnh:
$ 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"
Ví dụ trong 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";
}
Lưu ý, mã php không được kiểm tra và lấy ví dụ từ tài liệu cốt lõi ở đây. Mã sản xuất sẽ cần được sửa đổi tùy thuộc vào các khóa cần tra cứu.
Đối với những người trên Ubuntu, đây là hướng dẫn để nâng cấp php5-redis:
- Tải xuống gói 2.2.7 tại đây:http://pecl.php.net/package/redis
-
$ php -i | grep Redis Redis Support => enabled Redis Version => 2.2.4
- Làm theo hướng dẫn trong README để phpize, cấu hình, cài đặt
- Tạo một liên kết tượng trưng cho gói cli dòng lệnh:
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