php操作redis工具類
阿新 • • 發佈:2018-11-12
config.php
<?php
//
//redis配置
define('HOST','localhost');
define('PORT', '6379');
define('OVERTIME', '0');
?>
Redistool.php
<?php include 'config.php'; class Redistool{ //redis控制代碼 private $redis = NULL; /** * */ public function __construct(){ $this->redis = new Redis(); $this->redis->connect(HOST,PORT,OVERTIME); } //===================string======================== /** * 建立一個string型別的快取 * @param string $key [欄位的鍵] * @param string $value [值] * @param integer $time [過期時間] */ public function set_string($key = '',$value = '',$time = 600){ return $this->redis->set($key,$value,$time); } /** * 獲取string型別的快取 * @param [type] $key [欄位的值] */ public function get_string($key){ return $this->redis->get($key); } /** * 建立多個string型別的快取(以陣列方式傳進來。一次設定多個) * @param array $array [要被寫入快取的陣列] * @param integer $time [過期時間] */ public function set_string_arr($array = [],$time = 600){ foreach ($array as $key => $value) { $res = $this->redis->set($key,$value,$time); if(!$res) return 'set string error'; } } /** * 將指定string型別的快取的值自增 * @param string $key [欄位的鍵] * @param string $num [自增的數值] */ public function string_inc($key = '',$num = ''){ if(!is_numeric($num)) return 'the second argrement is a number'; return $this->redis->incrby($key,$num); } /** * 將指定string型別的快取的值自減少 * @param string $key [欄位的鍵] * @param string $num [自減的數值] */ public function string_dec($key = '',$num = ''){ if(!is_numeric($num)) return 'the second argrement is a number'; return $this->redis->decrby($key,$num); } /** * 在指定string型別的快取末尾新增字串。 * @param string $key [欄位的鍵] * @param string $value [值] */ public function string_append($key = '',$value = ''){ return $this->redis->append($key,$value); } //===================hash============================ /** * 建立一個hash型別的快取 * @param string $name [hash名] * @param array $array [要被寫入快取的陣列] */ public function set_hash($name = '',$array = []){ $flag = 1; foreach ($array as $key => $value) { $res = $this->redis->hSet($name,$key,$value); if(!$res) $flag = 0; } if($flag) return 1; else return 'the hash has areadly created,but you can still add the key and the value'; } /** * 獲取一個hash型別的快取 * @param string $name [hash名] */ public function get_hash($name = ''){ return $this->redis->hGetAll($name); } /** * 獲取指定一個hash型別中指定key的值 * @param string $name [hash名] * @param string $key [欄位的鍵] */ public function get_hash_value($name = '',$key = ''){ return $this->redis->hGet($name,$key); } /** * 為hash型別中的指定key的整形數值進行加減(正數加負數減) * @param string $name [hash名] * @param string $key [欄位的鍵] * @param integer $num [加減數] */ public function hash_add_sub($name = '',$key = '',$num = 0){ return $this->redis->hinCrby($name,$key,$num); } /** * 刪除一個hash型別快取中的欄位 * @param string $name [hash名] * @param string $key [欄位的鍵] */ public function rm_hash_key($name = '',$key = ''){ return $this->redis->hDel($name,$key); } //===================list========================= /** * 建立一個list型別的快取 * @param string $name [list名] * @param string $value [值] */ public function set_list($name = '',$value = ''){ return $this->redis->lPush($name,$value); } /** * 獲取指定list範圍中的list型別快取 * 預設返回全部的值 * @param string $name [list名] * @param integer $begin [開始的索引] * @param integer $end [結束的索引] */ public function get_list_range($name = '',$begin = 0,$end = 1){ return $this->redis->lRange($name,$begin,$end); } /** * 獲取list的第一個元素。如果沒有元素則阻塞列表直到等待超時或發現可彈出元素(就是新進入List的元素)為止 * @param string $name [list名] * @param integer $time [超時時間] */ public function getrm_listbegin_block($name = '',$time = 60){ return $this->redis->bLpop($name,$time); } /** * 獲取list的最後一個元素。如果沒有元素則阻塞列表直到等待超時或發現可彈出元素(就是新進入List的元素)為止 * @param string $name [list名] * @param integer $time [超時時間] */ public function getrm_listend_block($name = '',$time = 60){ return $this->redis->bRpop($name,$time); } /** * 獲取指定list的長度 * @param string $name [list名] */ public function get_list_length($name = ''){ return $this->redis->lLen($name); } /** * 擷取指定list範圍的值 * @param string $name [list名] * @param integer $begin [開始的索引] * @param integer $end [結束的索引] */ public function trim_list($name = '',$begin = 0,$end = 0){ return $this->redis->lTrim($name,$begin,$end); } /** * 根據count的值,移除與value相等的元素 * count > 0 : 從表頭開始向表尾搜尋,移除與 value 相等的元素,數量為 count * count < 0 : 從表尾開始向表頭搜尋,移除與 value 相等的元素,數量為 count 的絕對值 * count = 0 : 移除表中所有與 value 相等的值 * @param string $name [list名] * @param integer $count [數量] * @param string $value [值] */ public function rm_value_list($name = '',$count = 0,$value = ''){ return $this->redis->lRem($name,$count,$value); } //==========================set============================\ /** * 建立一個set快取 * @param string $name [set名] * @param string $value [值] */ public function set_set($name = '',$value = ''){ return $this->redis->sAdd($name,$value); } /** * 獲取set中的成員數 * @param string $name [set名] */ public function get_num_set($name = ''){ return $this->redis->sCard($name); } /** * 獲取set中的所有成員 * @param string $name [set名] */ public function get_set($name = ''){ return $this->redis->sMembers($name); } /** * 將name1和name2進行比較,返回name1中不同於name2的值(name2的值不會返回) * @param string $name1 [要比較的set] * @param string $name2 [要比較的set] */ public function contrast_set($name1 = '',$name2 = ''){ return $this->redis->sDiff($name1,$name2); } /** * 將name1和name2進行比較,存入name1中不同於name2的值(name2的值不會被存入) * @param string $store [要儲存進去的快取名(如果已經存在將被覆蓋)] * @param string $name1 [要比較的set] * @param string $name2 [要比較的set] */ public function contrast_store_set($store = '',$name1 = '',$name2 = ''){ return $this->redis->sDiffStore($store,$name1,$name2); } /** * 獲取指定兩個set的交集 * @param string $name1 [要比較的set] * @param string $name2 [要比較的set] */ public function same_set($name1 = '',$name2 = ''){ return $this->redis->sinter($name1,$name2); } /** * 將name1和name2進行比較,存入name1與name2的交集 * @param string $store [要儲存進去的快取名(如果已經存在將被覆蓋)] * @param string $name1 [要比較的set] * @param string $name2 [要比較的set] */ public function same_store_set($store = '',$name1 = '',$name2 = ''){ return $this->redis->sinterStore($store,$name1,$name2); } /** * 判斷value是否在指定的set內 * @param string $name [set名] * @param string $value [值] * @return integer [true false] */ public function is_have_set($name = '',$value = ''){ return $this->redis->sisMember($name,$value); } /** * 在指定的set中獲取其中的隨機值 * @param string $name [set值] * @param integer $count [要獲取個數] */ public function rand_set($name = '',$count = 0){ return $this->redis->sRandMember($name,$count); } /** * 移除set中的隨機元素(隨機個數由count決定)。移除時返回該元素(可以用來抽獎) * @param string $name [set值] * @param integer $count [個數] */ public function rm_get_set($name = '',$count = 0){ return $this->redis->sPop($name,$count); } /** * 移除set中的元素一個或多個元素 * @param string $name [set名] * @param string or array $value [值] */ public function rm_set($name = '',$value = ''){ if(is_array($value)){ $i = 0; foreach ($value as $key) { $this->redis->sRem($name,$key); $i++; } return $i; } return $this->redis->sRem($name,$value); } /** * 將兩個set的值合併到一起(自動去重) * @param string $name1 [要合併的set] * @param string $name2 [要合併的set] */ public function sun_set($name1 = '',$name2 = ''){ return $this->redis->sunion($name1,$name2); } /** * 將兩個set的值合併到一起並存儲到另一個set中(自動去重,如果另一個set已經存在,則覆蓋) * @param string $store [要儲存到的set] * @param string $name1 [要合併的set] * @param string $name2 [要合併的set] */ public function sun_stroe_set($store = '',$name1 = '',$name2 = ''){ return $this->redis->sunionStore($store,$name1,$name2); } /** * 迭代(個人理解可以模糊搜尋指定set中的值) * @param string $name [set名] * @param string $pattern [要搜尋的值。格式:xxx*或者xxx] * @param integer $cursor [暫時不知道有什麼用] *注意:如果值開頭為數字就會搜尋不到 */ public function iter_set($name = '',$pattern = '',$cursor = 1){ return $this->redis->sScan($name,$cursor,$pattern); } //====================sorted set=========================== /** * 將一個值加入到sorted set中 * @param string $name [sorted set名] * @param integer $score [分數(sorted set根據分數從小到大排序)] * @param string $value [值] */ public function set_sorted($name = '',$score = 0,$value = ''){ return $this->redis->zAdd($name,$score,$value); } /** * 獲取一個sorted set中指定索引範圍的值(預設是全部返回) * @param string $name [sorted set名] * @param integer $begin [開始的範圍] * @param integer $end [結束的範圍] */ public function range_sorted($name = '',$begin = 0,$end = -1,$withscores = 0){ return $this->redis->zRange($name,$begin,$end,$withscores); } /** * 獲取一個sorted set中指定分數範圍的值。 * @param string $name [sorted set名] * @param integer $begin [開始的範圍] * @param integer $end [結束的範圍] */ public function range_score_sorted($name = '',$begin = '-inf',$end = '+inf'){ return $this->redis->zRangeByScore($name,$begin,$end); } /** * 獲取指定sorted set中指定的值的索引(從0開始的) * @param string $name [sorted set名] * @param string $value [值] */ public function get_index_sorted($name = '',$value = ''){ return $this->redis->zRank($name,$value); } /** * 獲取指定sorted set值的數量 * @param string $name [sorted set名] */ public function get_num_sorted($name = ''){ return $this->redis->zCard($name); } /** * 獲取sorted set指定範圍中的值的數量,包括開始和結束 * @param string $name [sorted set名] * @param integer $begin [開始範圍] * @param integer $end [結束範圍] */ public function range_num_sorted($name = '',$begin = 0,$end = 0){ return $this->redis->zCount($name,$begin,$end); } /** * 獲取指定分數區間的值(這個是開始分數在後,結束分數在前,從大到小排) * @param string $name [sorted set名] * @param integer $end [結束分數] * @param integer $begin [開始分數] */ public function score_range_sorted($name = '',$end = 0,$begin = 0){ return $this->redis->zRevRangeByScore($name,$end,$begin); } /** * 獲取指定區間內的成員(從大到小排列) * @param string $name [sorted set名] * @param integer $begin [開始索引] * @param integer $end [結束索引] */ public function score_inc_range_sorted($name = '',$begin = 0,$end = 0){ return $this->redis->zRevRange($name,$begin,$end); } /** * 獲取成員的排名(0最高,按照分數來排名) * @param string $name [sorted set名] * @param string $value [值] */ public function rank_sorted($name = '',$value = ''){ return $this->redis->zRevRank($name,$value); } /** * 給sorted set指定值加上增量(增量為負就是減)。如果指定值不存在,那就新增一個,並且給這個分數為增量 * @param string $name [sorted set名] * @param integer $inc [增量] * @param string $value [值] * @return int [該值現在的分數] */ public function inc_score_sorted($name = '',$inc = 0,$value = ''){ return $this->redis->zIncrBy($name,$inc,$value); } /** * 對比兩個sorted set並把他們相同的值(交集)儲存在新的sorted set中 * @param string $store [要儲存的新的sorted set] * @param array $array [要對比的幾個sorted set都放在這裡] */ public function same_store_sorted($store = '',$array = []){ return $this->redis->zInterStore($store,$num); } /** * 將兩個sorted set的值合併到一起並存儲到另一個sorted set中(自動去重,如果另一個sorted set已經存在,則覆蓋) * @param string $store [要儲存到的sorted set] * @param string $name1 [要合併的sorted set] * @param string $name2 [要合併的sorted set] */ public function sun_stroe_sorted($store = '',$arr = []){ return $this->redis->zunionStore($store,['test1','test2']); } /** * 刪除指定sorted set中的指定值 * @param string $name [sorted set名] * @param string or value $value [值] */ public function rm_sorted($name = '',$value = ''){ return $this->redis->zRem($name,$value); } /** * 刪除指定sorted set中的指定索引區間的所有成員 * @param string $name [sorted set名] * @param integer $begin [刪除開始的索引] * @param integer $end [刪除結束的索引] */ public function rm_index_sorted($name = '',$begin = 0,$end = 0){ return $this->redis->zRemRangeByRank($name,$begin,$end); } /** * 刪除指定sorted set中,指定分數區間的所有成員 * @param string $name [sorted set] * @param integer $begin [開始的分數] * @param integer $end [結束的分數] */ public function rm_score_sorted($name = '',$begin = 0,$end = 0){ return $this->redis->zRemRangeByScore($name,$begin,$end); } //=======================remove============================ /** * 刪除指定的快取 * @param string $key [指定的快取名] */ public function remove($key = ''){ return $this->redis->del($key); } } $redis = new Redistool(); ?>