Redis多库选择单例类 代码分享

发布时间:2020-04-05编辑:脚本学堂
分享一例Redis中多库选择的单例类,不错的代码,即学习了redis的用法,又可以掌握下单例模式的实现方法,有需要的朋友参考下。

本节内容:
Redis多库选择单例类

例子:
 

复制代码 代码示例:
<?php
/**
* Redis多库选择,单例模式
* by www.jb200.com
*/
 
class MultiRedisConnect 

    /**
     * hostname
     *
     * @var string
     */ 
    const REDISHOSTNAME = "127.0.0.1"; 
 
    /**
     * port
     *
     * @var int
     */ 
    const REDISPORT = 6379; 
 
    /**
     * timeout
     *
     * @var int
     */ 
    const REDISTIMEOUT = 0; 
 
    /**
     * password
     *
     * @var string
     */ 
    const REDISPASSWORD = "123456"; 
 
    /**
     * 类单例数组
     *
     * @var array
     */ 
    private static $instance = array(); 
 
    /**
     * redis连接句柄
     *
     * @var object
     */ 
    private $redis; 
 
    /**
     * hash的key
     *
     * @var int
     */ 
    private $hash; 
 
    /**
     * 私有化构造函数,防止类外实例化
     *
     * @param int $dbnumber            
     */ 
    private function __construct ($dbnumber) 
    { 
        $dbnumber = (int) $dbnumber; 
        $this->hash = $dbnumber; 
        $this->redis = new Redis(); 
        $this->redis->connect(self::REDISHOSTNAME, self::REDISPORT, self::REDISTIMEOUT); 
        $this->redis->auth(self::REDISPASSWORD); 
        $this->redis->select($dbnumber); 
    } 
 
    private function __clone () 
    {} 
 
    /**
     * 获取类单例
     *
     * @param int $dbnumber            
     * @return object
     */ 
    public static function getRedisInstance ($dbnumber) 
    { 
        $hash = (int) $dbnumber; 
         
        if (! isset(self::$instance[$hash])) { 
            self::$instance[$hash] = new MultiRedisConnect($dbnumber); 
        } 
         
        return self::$instance[$hash]; 
    } 
 
    /**
     * 获取redis的连接实例
     *
     * @return object
     */ 
    public function getRedisConnect () 
    {   // www.jb200.com
        return $this->redis; 
    } 
 
    /**
     * 关闭单例时做清理工作
     */ 
    public function __destruct () 
    { 
        $key = $this->hash; 
        self::$instances[$key]->redis->close(); 
        self::$instances[$key] = null; 
    }
} ?>