php redis實現連線池
阿新 • • 發佈:2018-12-25
什麼是連線池?
redis連線靜態類。redis連線池 減少redis的重複連線,降低記憶體消耗!
通常情況下, 當我們需要做redis操作時, 會建立一個連線, 並基於這個連線進行redis操作, 操作完成後, 釋放連線,一般情況下, 這是沒問題的, 但當併發量比較高的時候, 頻繁的連線建立和釋放對效能會有較高的影響於是, 連線池就發揮作用了連線池的原理是, 通過預先建立多個連線, 當進行redis操作時, 直接獲取已經建立的連線進行操作, 而且操作完成後, 不會釋放, 用於後續的其他redis操作這樣就達到了避免頻繁的redis連線建立和釋放的目的, 從而提高效能了
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]; } }
使用過程:
require 'RedisPool.php';
$conf = array(
'RA' => array('127.0.0.1',6379) //定義Redis配置
);
RedisPool::addServer($conf); //新增Redis配置
$redis = RedisPool::getRedis('RA'); //連線RA,使用預設0庫
$redis->set('user','private');
echo $redis ->get('user');