區別:
- 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,
]);

