PHP redis負載平衡代碼

來源:互聯網
上載者:User

標籤:style   blog   io   ar   color   os   使用   sp   for   

<?php/** * This is a Redis exntend class* jay.w */ class RedisClient{public static $instance = NULL;public static $linkHandle = array();private $conf;//construct:connect redispublic function __construct($config){    $this->conf = $config;} /** * Get a instance of MyRedisClient * * @param string $key * @return object */static function getInstance($configs){    if (!self::$instance) {        self::$instance = new self($configs);    }    return self::$instance;}  /** * 獲得redis Resources *  * @param $key   redis存的key/或隨機值 * @param string $tag   master/slave */public function getRedis($key=null,$tag=master){    if(!empty(self::$linkHandle[$tag])){        return self::$linkHandle[$tag];    }     empty($key)?$key = uniqid():‘‘;    $redis_arr  = $this->conf[$tag];    $arr_index = $this->getHostByHash($key,count($this->conf[$tag])); //獲得相應主機的數組下標     $obj = new Redis();    $obj->pconnect($redis_arr[$arr_index][host],$redis_arr[$arr_index][port]);    self::$linkHandle[$tag] = $obj;     return $obj;} /** * 隨機取出主機 * @param $key      $變數key值 * @param $n        主機數 * @return string */private function getHostByHash($key,$n){    if($n<2) return 0;    $u = strtolower($key);    $id = sprintf("%u", crc32($key));     $m = base_convert( intval(fmod($id, $n)), 10, $n);    return $m{0};} /** * 關閉串連 * pconnect 串連是無法關閉的 *   * @param int $flag 關閉選擇 0:關閉 Master 1:關閉 Slave 2:關閉所有 * @return boolean */public function close($flag=2){    switch($flag){        // 關閉 Master        case 0:            foreach (self::$linkHandle[master] as $var){                $var->close();            }            break;            // 關閉 Slave        case 1:            foreach (self::$linkHandle[slave] as $var){                $var->close();            }            break;            // 關閉所有        case 1:            $this->close(0);            $this->close(1);            break;    }    return true;} //------------------------------------------------------------------------------- /** * 返回 key 指定的雜湊集中所有的欄位和值 * @param $key * @return 傳回值 * 多個傳回值:雜湊集中欄位和值的列表。當 key 指定的雜湊集不存在時返回空列表。 */public function hGetAll($key){    return $this->getRedis($key,slave)->hGetAll($key);} /** * redis 字串(String) 類型 * 將key和value對應。如果key已經存在了,它會被覆蓋,而不管它是什麼類型。 * @param $key * @param $value * @param $exp 到期時間 */public function set($key,$value,$exp=0){    $redis = $this->getRedis($key);    $redis->set($key,$value);    !empty($exp) && $redis->expire($key,$exp);} /** * 設定key對應字串value,並且設定key在給定的seconds時間之後逾時到期 * @param  $key * @param  $value * @param  $exp */public function setex($key,$value,$exp=0){    $redis = $this->getRedis($key);    $redis->setex($key,$value,$exp);}/** * 設定一個key的到期時間 *  * @param  $key      * @param  $exp 到期時間 */public function setExpire($key,$exp){    $redis = $this->getRedis($key);    $redis->expire($key,$exp);}/** * 返回key的value。如果key不存在,返回特殊值nil。如果key的value不是string,就返回錯誤,因為GET只處理string類型的values。 * @param $key */public function get($key){    return $this->getRedis($key,slave)->get($key);}/** * KEYS pattern * 尋找所有匹配給定的模式的鍵 * @param $is_key   預設是一個非正則表達試,使用模糊查詢 * @param $key */public function keys($key,$is_key=true){    if ($is_key) {        return $this->getRedis($key,slave)->keys("*$key*");    }    return $this->getRedis($key,slave)->keys("$key");} /** * 批量填充HASH表。不是字串類型的VALUE,自動轉換成字串類型。使用標準的值。NULL值將被儲存為一個空的字串。 *  * 可以大量新增更新 value,key 不存在將建立,存在則更新值 *  * @param  $key * @param  $fieldArr * @return * 如果命令執行成功,返回OK。 * 當key不是雜湊表(hash)類型時,返回一個錯誤。 */public function hMSet($key,$fieldArr){    return $this->getRedis($key)->hmset($key,$fieldArr);}/** * 設定 key 指定的雜湊集中指定欄位的值。如果 key 指定的雜湊集不存在,會建立一個新的雜湊集並與 key 關聯。如果欄位在雜湊集中存在,它將被重寫。 * * @param $key * @param $field_name * @param $field_value * @return 1如果field是一個新的欄位,0如果field原來在map裡面已經存在 */public function hSet($key,$field_name,$field_value){    return $this->getRedis($key)->hset($key,$field_name,$field_value);}/** * 向已存在於redis裡的Hash 添加多個新的欄位及值 *  * @param  $key         redis 已存在的key * @param  $field_arr   kv形數組 */public function hAddFieldArr($key,$field_arr){    foreach ($field_arr as $k=>$v){        $this->hAddFieldOne($key, $k, $v);    }} /** * 向已存在於redis裡的Hash 添加一個新的欄位及值 * @param  $key * @param  $field_name * @param  $field_value * @return bool */public function hAddFieldOne($key,$field_name,$field_value){    return $this->getRedis($key)->hsetnx($key,$field_name,$field_value);} /** * 向Hash裡添加多個新的欄位或修改一個已存在欄位的值 * @param $key * @param $field_arr */public function hAddOrUpValueArr($key,$field_arr){    foreach ($field_arr as $k=>$v){        $this->hAddOrUpValueOne($key, $k, $v);    }}/** * 向Hash裡添加多個新的欄位或修改一個已存在欄位的值 * @param  $key * @param  $field_name * @param  $field_value * @return boolean  * 1 if value didn‘t exist and was added successfully,  * 0 if the value was already present and was replaced, FALSE if there was an error. */public function hAddOrUpValueOne($key,$field_name,$field_value){    return $this->getRedis($key)->hset($key,$field_name,$field_value);} /** *  刪除雜湊表key中的多個指定域,不存在的域將被忽略。 * @param $key * @param $field_arr */public function hDel($key,$field_arr){    foreach ($field_arr as $var){        $this->hDelOne($key,$var);    }} /** * 刪除雜湊表key中的一個指定域,不存在的域將被忽略。 *  * @param $key * @param $field * @return BOOL TRUE in case of success, FALSE in case of failure */public function hDelOne($key,$field){    return $this->getRedis($key)->hdel($key,$field);} /** * 重新命名key *  * @param $oldkey * @param $newkey */public function renameKey($oldkey,$newkey){    return $this->getRedis($oldkey)->rename($oldkey,$newkey);} /** * 刪除一個或多個key * @param $keys */public function delKey($keys){    if(is_array($keys)){        foreach ($keys as $key){            $this->getRedis($key)->del($key);        }    }else {        $this->getRedis($keys)->del($keys);    }}/** * 添加一個字串值到LIST容器的頂部(左側),如果KEY不存在,曾建立一個LIST容器,如果KEY存在並且不是一個LIST容器,那麼返回FLASE。 *  * @param $key * @param $val */public function lPush($key,$val){    $this->getRedis($key)->lPush($key,$val);} /** * 返回LIST頂部(左側)的VALUE,並且從LIST中把該VALUE彈出。 * @param $key */public function lPop($key){    $this->getRedis($key)->lPop($key);}  /** * 批量的添加多個key 到redis * @param $fieldArr */public function mSetnx($fieldArr){     $this->getRedis()->mSetnx($fieldArr);}}

 

PHP redis負載平衡代碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.