注意:PHP為腳本語言,腳本執行完畢Redis 連接自動關閉,所以連接池並不能跨腳本使用。
使用連接池的原因:在高並發情況下,頻繁地創建和釋放 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 !