前些日子,為啟用 laravel,引出來使用 Predis 還是 PhpRedis 問題;這兩者都是 PHP client for Redis;
PhpRedis
- 作為 php 的一個(gè)擴(kuò)展存在;
- 編譯出 redis.so,放到 extension_dir 下;
- 在 php.ini 啟用(enable the module in the PHP config file);
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/"
extension = "redis.so"
- C 編寫的,速度快、內(nèi)存?。?/li>
- 努力實(shí)現(xiàn)每一個(gè) redis 命令;
- 可以作為 PHP Session handler;
phpredis can be used to store PHP sessions;
Predis
- 純 php 實(shí)現(xiàn),速度慢、內(nèi)存大;
- 一個(gè)簡單的對 redis 命令的包裝(wrap);
- 兼容性和彈性更好,支持幾乎所有 redis 特性;
- FAQ about performances;
選用哪個(gè)?
- 如果 redis 的 client 和 server 在一臺(tái)機(jī)器,則由于沒有網(wǎng)絡(luò)時(shí)延,PhpRedis 的確快很多;
如果不在同一臺(tái)機(jī)器,則網(wǎng)絡(luò)時(shí)延的因素對速度的影響是一個(gè)大頭,Predis 的慢點(diǎn)就不是問題了; - pipeline 技術(shù) 對于減少網(wǎng)絡(luò)時(shí)延很有效;
<?php
// http://odino.org/redis-slow-with-php-think-again/
$start = microtime(true);
for ($j = 0; $j < 10000; $j++) {
$key = sprintf("key:%05d", $j);
$redis->pipeline();
/* GET or SET */
if (rand() % 2 == 0) {
$redis->set($key, rand());
} else {
$redis->get($key);
}
}
- How fast is Redis?
- Redis: How does PRedis compare with phpredis?
-
About Predis and benchmarks: why a pure-PHP Redis client anyway?
Predis 作者 nrk 對 Aleksey's Benchmarking Memcached and Redis Clients 的辯析文章;
兩者不能兼容共存?
-?