PHP 實現 Redis 連接池


注意: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 !


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM