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 !

posted @ 2020-10-19 14:46  兴同学在上海  阅读(2836)  评论(0编辑  收藏  举报