區別:
- phpredis, 它是用c寫的php的高效擴展:https://github.com/phpredis/phpredis,
- predis, 它是用純php代碼寫的,也用的蠻多的:https://github.com/nrk/predis。
在性能上的區別當然是擴展更好一些,但其實這兩個實現還有更大的區別,就是連接的保持。
- phpredis在擴展中使用c可以保持php-fpm到redis的長連接,所以一個php-fpm進程上的多個請求是復用同一個連接的。phpredis的pconnect就是長連接方式。
- predis是使用php的socket來連接redis,所以需要每次請求連接redis。
可以看出laravel的官方是推薦使用predis的,因為純php實現的原因,只需要composer即可安裝,非常符合laravel便捷的思想。
phpredis 和 predis 的性能差距沒有跨數量級,當然要考慮具體業務,如果業務非常依賴redis,並且單機qps需要支持的比較大,建議使用phpredis。如果你只是使用laravel使用redis實現規模小的業務,建議不用改變predis。
[PHPRedis]
1. 單機方式
<?php $client = new Redis(); $client->connect('192.168.1.1', '6379'); echo $client->get('cache_key:oneKey');
2. 集群方式
<?php $redis_list = ['192.168.1.1:6379','192.168.1.2:6379','192.168.1.3:6379']; $client = new RedisCluster(NUll,$redis_list);
echo $client->get('cache_key:oneKey');
3. 超時設置
<?php $redis_list = ['192.168.1.1:6379','192.168.1.2:6379','198.168.1.3:6379', 1.5, 1.5]; $client = new RedisCluster(NUll,$redis_list);
echo $client->get('cache_key:oneKey');
timeout和read_timeout功能。就是加到master列表的后面。
timeout表示連接redis的最長時間,這里設為1.5秒,表示超過1.5秒要是還沒連接成功就返回false 。
read_timeout表示連接redis成功后,讀取一個key的超時時間,有時候讀取一個key 可能value比較大,讀取需要很長時間,這里設置1.5秒,表示要是過了1.5秒還沒讀取到數據就返回false。
4. 擴展安裝
~ git clone git@github.com:phpredis/phpredis.git ~ cd phpredis ~ git fetch ~ git checout feature/redis_cluster #切換到cluster分支 ~ phpize ~ ./configure ~ make ~ make install
[predis]
1. 連接方式(集群)
<?php use Predis\Client; require __DIR__ . '/../vendor/autoload.php'; // 寫一個節點也可以 $redis_list = [ 'tcp://192.168.1.1:6379', 'tcp://192.168.1.2:6379', 'tcp://192.168.1.3:6379' ]; $redis = new Client($redis_list, ['cluster'=>'redis']); echo $redis->get('cache_key:oneKey');
2. 連接方式(單機)
Predis\Autoloader::register(); $client = new Predis\Client([ 'scheme' => $scheme, 'host' => $host, 'port' => $port, ]);