前些日子,为启用 laravel,引出来使用 Predis 还是 PhpRedis 问题;这两者都是 PHP client for Redis;
PhpRedis
- 作为 php 的一个扩展存在;
- 编译出 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 编写的,速度快、内存小;
- 努力实现每一个 redis 命令;
- 可以作为 PHP Session handler;
phpredis can be used to store PHP sessions;
Predis
- 纯 php 实现,速度慢、内存大;
- 一个简单的对 redis 命令的包装(wrap);
- 兼容性和弹性更好,支持几乎所有 redis 特性;
- FAQ about performances;
选用哪个?
- 如果 redis 的 client 和 server 在一台机器,则由于没有网络时延,PhpRedis 的确快很多;
如果不在同一台机器,则网络时延的因素对速度的影响是一个大头,Predis 的慢点就不是问题了; - pipeline 技术 对于减少网络时延很有效;
<?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 的辩析文章;
两者不能兼容共存?
-?