什么是連接池
redis連接靜態(tài)類。redis連接池 減少redis的重復(fù)連接,降低內(nèi)存消耗!
通常情況下, 當(dāng)我們需要做redis操作時, 會創(chuàng)建一個連接, 并基于這個連接進(jìn)行redis操作, 操作完成后, 釋放連接,
一般情況下, 這是沒問題的, 但當(dāng)并發(fā)量比較高的時候, 頻繁的連接創(chuàng)建和釋放對性能會有較高的影響
于是, 連接池就發(fā)揮作用了
連接池的原理是, 通過預(yù)先創(chuàng)建多個連接, 當(dāng)進(jìn)行redis操作時, 直接獲取已經(jīng)創(chuàng)建的連接進(jìn)行操作, 而且操作完成后, 不會釋放, 用于后續(xù)的其他redis操作
這樣就達(dá)到了避免頻繁的redis連接創(chuàng)建和釋放的目的, 從而提高性能了
<?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)//兩個參數(shù)要連接的服務(wù)器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];
}
}
使用實(shí)例
<?php
require 'RedisPool.php';
$conf = array(
'RA' => array('127.0.0.1',6379) //定義Redis配置
);
RedisPool::addServer($conf); //添加Redis配置
$redis = RedisPool::getRedis('RA'); //連接RA,使用默認(rèn)0庫
$redis->set('user','private');
echo $redis ->get('user');