1. 程式人生 > >php操作redis工具類

php操作redis工具類

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();
?>