使用连接池的原因:在高并发情况下,频繁地创建和释放 Redis 连接会对性能有较大影响。
连接池的原理:预先创建多个 Redis 连接,在进行 Redis 操作时直接获取已经创建的连接进行操作,操作完成后不会释放,后续其他 Redis 操作可以继续使用。这样就避免了频繁的 Redis 连接和释放。
示例代码:
1、连接池类:
<?php class RedisPool { private static $connections = array(); //定义一个对象池 private static $servers = array(); //定义redis配置文件 public static function addServer($conf) //定义添加redis配置方法 { foreach ($conf as $alias => $data){ self::$servers[$alias]=$data; } } public static function getRedis($alias,$select = 0)//两个参数要连接的服务器KEY,要选择的库 { if(!array_key_exists($alias,self::$connections)){ //判断连接池中是否存在 $redis = new Redis(); $redis->connect(self::$servers[$alias][0],self::$servers[$alias][1]); self::$connections[$alias]=$redis; if(isset(self::$servers[$alias][2]) && self::$servers[$alias][2]!=""){ self::$connections[$alias]->auth(self::$servers[$alias][2]); } } self::$connections[$alias]->select($select); return self::$connections[$alias]; } }
2、使用:
//连接redis function connect_to_redis() { global $CONFIG; //使用redis连接池 $conf = array( 'RA' => array($CONFIG['REDIS']['HOST'],$CONFIG['REDIS']['PORT'],$CONFIG['REDIS']['PASSWORD']) //定义Redis配置 ); RedisPool::addServer($conf); //添加Redis配置 $redis = RedisPool::getRedis('RA',1); //连接RA,使用默认0库 return $redis; }
Enjoy it !