欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

扣丁學(xué)堂PHP實現(xiàn)的Redis操作通用類示例

2018-06-29 09:35:06 1563瀏覽

本文實例講述了PHP實現(xiàn)的Redis操作通用類。分享給大家供大家參考,可以更多的去了解Redis通用類的大概類型,方便之后去接觸和深入的了解,更方便以后的去了解PHP的一些其他的東西,好讓自己以后學(xué)習(xí)PHP更加迅速。望大家有好的建議。






找到一個比較全的RedisPHP操作類庫,分享給大家

<?php
/**
*redis操作類
*說明,任何為false的串,存在redis中都是空串。
*只有在key不存在時,才會返回false。
*這點可用于防止緩存穿透
*
*/
classRedis
{
private$redis;
//當(dāng)前數(shù)據(jù)庫ID號
protected$dbId=0;
//當(dāng)前權(quán)限認(rèn)證碼
protected$auth;
/**
*實例化的對象,單例模式.
*@var\iphp\db\Redis
*/
staticprivate$_instance=array();
private$k;
//連接屬性數(shù)組
protected$attr=array(
//連接超時時間,redis配置文件中默認(rèn)為300秒
'timeout'=>30,
//選擇的數(shù)據(jù)庫。
'db_id'=>0,
);
//什么時候重新建立連接
protected$expireTime;
protected$host;
protected$port;
privatefunction__construct($config,$attr=array())
{
$this->attr=array_merge($this->attr,$attr);
$this->redis=newRedis();
$this->port=$config['port']?$config['port']:6379;
$this->host=$config['host'];
$this->redis->connect($this->host,$this->port,$this->attr['timeout']);
if($config['auth'])
{
$this->auth($config['auth']);
$this->auth=$config['auth'];
}
$this->expireTime=time()+$this->attr['timeout'];
}
/**
*得到實例化的對象.
*為每個數(shù)據(jù)庫建立一個連接
*如果連接超時,將會重新建立一個連接
*@paramarray$config
*@paramint$dbId
*@return\iphp\db\Redis
*/
publicstaticfunctiongetInstance($config,$attr=array())
{
//如果是一個字符串,將其認(rèn)為是數(shù)據(jù)庫的ID號。以簡化寫法。
if(!is_array($attr))
{
$dbId=$attr;
$attr=array();
$attr['db_id']=$dbId;
}
$attr['db_id']=$attr['db_id']?$attr['db_id']:0;
$k=md5(implode('',$config).$attr['db_id']);
if(!(static::$_instance[$k]instanceofself))
{
static::$_instance[$k]=newself($config,$attr);
static::$_instance[$k]->k=$k;
static::$_instance[$k]->dbId=$attr['db_id'];
//如果不是0號庫,選擇一下數(shù)據(jù)庫。
if($attr['db_id']!=0){
static::$_instance[$k]->select($attr['db_id']);
}
}
elseif(time()>static::$_instance[$k]->expireTime)
{
static::$_instance[$k]->close();
static::$_instance[$k]=newself($config,$attr);
static::$_instance[$k]->k=$k;
static::$_instance[$k]->dbId=$attr['db_id'];
//如果不是0號庫,選擇一下數(shù)據(jù)庫。
if($attr['db_id']!=0){
static::$_instance[$k]->select($attr['db_id']);
}
}
returnstatic::$_instance[$k];
}
privatefunction__clone(){}
/**
*執(zhí)行原生的redis操作
*@return\Redis
*/
publicfunctiongetRedis()
{
return$this->redis;
}
/*****************hash表操作函數(shù)*******************/
/**
*得到hash表中一個字段的值
*@paramstring$key緩存key
*@paramstring$field字段
*@returnstring|false
*/
publicfunctionhGet($key,$field)
{
return$this->redis->hGet($key,$field);
}
/**
*為hash表設(shè)定一個字段的值
*@paramstring$key緩存key
*@paramstring$field字段
*@paramstring$value值。
*@returnbool
*/
publicfunctionhSet($key,$field,$value)
{
return$this->redis->hSet($key,$field,$value);
}
/**
*判斷hash表中,指定field是不是存在
*@paramstring$key緩存key
*@paramstring$field字段
*@returnbool
*/
publicfunctionhExists($key,$field)
{
return$this->redis->hExists($key,$field);
}
/**
*刪除hash表中指定字段,支持批量刪除
*@paramstring$key緩存key
*@paramstring$field字段
*@returnint
*/
publicfunctionhdel($key,$field)
{
$fieldArr=explode(',',$field);
$delNum=0;
foreach($fieldArras$row)
{
$row=trim($row);
$delNum+=$this->redis->hDel($key,$row);
}
return$delNum;
}
/**
*返回hash表元素個數(shù)
*@paramstring$key緩存key
*@returnint|bool
*/
publicfunctionhLen($key)
{
return$this->redis->hLen($key);
}
/**
*為hash表設(shè)定一個字段的值,如果字段存在,返回false
*@paramstring$key緩存key
*@paramstring$field字段
*@paramstring$value值。
*@returnbool
*/
publicfunctionhSetNx($key,$field,$value)
{
return$this->redis->hSetNx($key,$field,$value);
}
/**
*為hash表多個字段設(shè)定值。
*@paramstring$key
*@paramarray$value
*@returnarray|bool
*/
publicfunctionhMset($key,$value)
{
if(!is_array($value))
returnfalse;
return$this->redis->hMset($key,$value);
}
/**
*為hash表多個字段設(shè)定值。
*@paramstring$key
*@paramarray|string$valuestring以','號分隔字段
*@returnarray|bool
*/
publicfunctionhMget($key,$field)
{
if(!is_array($field))
$field=explode(',',$field);
return$this->redis->hMget($key,$field);
}
/**
*為hash表設(shè)這累加,可以負(fù)數(shù)
*@paramstring$key
*@paramint$field
*@paramstring$value
*@returnbool
*/
publicfunctionhIncrBy($key,$field,$value)
{
$value=intval($value);
return$this->redis->hIncrBy($key,$field,$value);
}
/**
*返回所有hash表的所有字段
*@paramstring$key
*@returnarray|bool
*/
publicfunctionhKeys($key)
{
return$this->redis->hKeys($key);
}
/**
*返回所有hash表的字段值,為一個索引數(shù)組
*@paramstring$key
*@returnarray|bool
*/
publicfunctionhVals($key)
{
return$this->redis->hVals($key);
}
/**
*返回所有hash表的字段值,為一個關(guān)聯(lián)數(shù)組
*@paramstring$key
*@returnarray|bool
*/
publicfunctionhGetAll($key)
{
return$this->redis->hGetAll($key);
}
/*********************有序集合操作*********************/
/**
*給當(dāng)前集合添加一個元素
*如果value已經(jīng)存在,會更新order的值。
*@paramstring$key
*@paramstring$order序號
*@paramstring$value值
*@returnbool
*/
publicfunctionzAdd($key,$order,$value)
{
return$this->redis->zAdd($key,$order,$value);
}
/**
*給$value成員的order值,增加$num,可以為負(fù)數(shù)
*@paramstring$key
*@paramstring$num序號
*@paramstring$value值
*@return返回新的order
*/
publicfunctionzinCry($key,$num,$value)
{
return$this->redis->zinCry($key,$num,$value);
}
/**
*刪除值為value的元素
*@paramstring$key
*@paramstirng$value
*@returnbool
*/
publicfunctionzRem($key,$value)
{
return$this->redis->zRem($key,$value);
}
/**
*集合以order遞增排列后,0表示第一個元素,-1表示最后一個元素
*@paramstring$key
*@paramint$start
*@paramint$end
*@returnarray|bool
*/
publicfunctionzRange($key,$start,$end)
{
return$this->redis->zRange($key,$start,$end);
}
/**
*集合以order遞減排列后,0表示第一個元素,-1表示最后一個元素
*@paramstring$key
*@paramint$start
*@paramint$end
*@returnarray|bool
*/
publicfunctionzRevRange($key,$start,$end)
{
return$this->redis->zRevRange($key,$start,$end);
}
/**
*集合以order遞增排列后,返回指定order之間的元素。
*min和max可以是-inf和+inf表示最大值,最小值
*@paramstring$key
*@paramint$start
*@paramint$end
*@packagearray$option參數(shù)
*withscores=>true,表示數(shù)組下標(biāo)為Order值,默認(rèn)返回索引數(shù)組
*limit=>array(0,1)表示從0開始,取一條記錄。
*@returnarray|bool
*/
publicfunctionzRangeByScore($key,$start='-inf',$end="+inf",$option=array())
{
return$this->redis->zRangeByScore($key,$start,$end,$option);
}
/**
*集合以order遞減排列后,返回指定order之間的元素。
*min和max可以是-inf和+inf表示最大值,最小值
*@paramstring$key
*@paramint$start
*@paramint$end
*@packagearray$option參數(shù)
*withscores=>true,表示數(shù)組下標(biāo)為Order值,默認(rèn)返回索引數(shù)組
*limit=>array(0,1)表示從0開始,取一條記錄。
*@returnarray|bool
*/
publicfunctionzRevRangeByScore($key,$start='-inf',$end="+inf",$option=array())
{
return$this->redis->zRevRangeByScore($key,$start,$end,$option);
}
/**
*返回order值在startend之間的數(shù)量
*@paramunknown$key
*@paramunknown$start
*@paramunknown$end
*/
publicfunctionzCount($key,$start,$end)
{
return$this->redis->zCount($key,$start,$end);
}
/**
*返回值為value的order值
*@paramunknown$key
*@paramunknown$value
*/
publicfunctionzScore($key,$value)
{
return$this->redis->zScore($key,$value);
}
/**
*返回集合以score遞增加排序后,指定成員的排序號,從0開始。
*@paramunknown$key
*@paramunknown$value
*/
publicfunctionzRank($key,$value)
{
return$this->redis->zRank($key,$value);
}
/**
*返回集合以score遞增加排序后,指定成員的排序號,從0開始。
*@paramunknown$key
*@paramunknown$value
*/
publicfunctionzRevRank($key,$value)
{
return$this->redis->zRevRank($key,$value);
}
/**
*刪除集合中,score值在startend之間的元素包括startend
*min和max可以是-inf和+inf表示最大值,最小值
*@paramunknown$key
*@paramunknown$start
*@paramunknown$end
*@return刪除成員的數(shù)量。
*/
publicfunctionzRemRangeByScore($key,$start,$end)
{
return$this->redis->zRemRangeByScore($key,$start,$end);
}
/**
*返回集合元素個數(shù)。
*@paramunknown$key
*/
publicfunctionzCard($key)
{
return$this->redis->zCard($key);
}
/*********************隊列操作命令************************/
/**
*在隊列尾部插入一個元素
*@paramunknown$key
*@paramunknown$value
*返回隊列長度
*/
publicfunctionrPush($key,$value)
{
return$this->redis->rPush($key,$value);
}
/**
*在隊列尾部插入一個元素如果key不存在,什么也不做
*@paramunknown$key
*@paramunknown$value
*返回隊列長度
*/
publicfunctionrPushx($key,$value)
{
return$this->redis->rPushx($key,$value);
}
/**
*在隊列頭部插入一個元素
*@paramunknown$key
*@paramunknown$value
*返回隊列長度
*/
publicfunctionlPush($key,$value)
{
return$this->redis->lPush($key,$value);
}
/**
*在隊列頭插入一個元素如果key不存在,什么也不做
*@paramunknown$key
*@paramunknown$value
*返回隊列長度
*/
publicfunctionlPushx($key,$value)
{
return$this->redis->lPushx($key,$value);
}
/**
*返回隊列長度
*@paramunknown$key
*/
publicfunctionlLen($key)
{
return$this->redis->lLen($key);
}
/**
*返回隊列指定區(qū)間的元素
*@paramunknown$key
*@paramunknown$start
*@paramunknown$end
*/
publicfunctionlRange($key,$start,$end)
{
return$this->redis->lrange($key,$start,$end);
}
/**
*返回隊列中指定索引的元素
*@paramunknown$key
*@paramunknown$index
*/
publicfunctionlIndex($key,$index)
{
return$this->redis->lIndex($key,$index);
}
/**
*設(shè)定隊列中指定index的值。
*@paramunknown$key
*@paramunknown$index
*@paramunknown$value
*/
publicfunctionlSet($key,$index,$value)
{
return$this->redis->lSet($key,$index,$value);
}
/**
*刪除值為vaule的count個元素
*PHP-REDIS擴(kuò)展的數(shù)據(jù)順序與命令的順序不太一樣,不知道是不是bug
*count>0從尾部開始
*>0從頭部開始
*=0刪除全部
*@paramunknown$key
*@paramunknown$count
*@paramunknown$value
*/
publicfunctionlRem($key,$count,$value)
{
return$this->redis->lRem($key,$value,$count);
}
/**
*刪除并返回隊列中的頭元素。
*@paramunknown$key
*/
publicfunctionlPop($key)
{
return$this->redis->lPop($key);
}
/**
*刪除并返回隊列中的尾元素
*@paramunknown$key
*/
publicfunctionrPop($key)
{
return$this->redis->rPop($key);
}
/*************redis字符串操作命令*****************/
/**
*設(shè)置一個key
*@paramunknown$key
*@paramunknown$value
*/
publicfunctionset($key,$value)
{
return$this->redis->set($key,$value);
}
/**
*得到一個key
*@paramunknown$key
*/
publicfunctionget($key)
{
return$this->redis->get($key);
}
/**
*設(shè)置一個有過期時間的key
*@paramunknown$key
*@paramunknown$expire
*@paramunknown$value
*/
publicfunctionsetex($key,$expire,$value)
{
return$this->redis->setex($key,$expire,$value);
}
/**
*設(shè)置一個key,如果key存在,不做任何操作.
*@paramunknown$key
*@paramunknown$value
*/
publicfunctionsetnx($key,$value)
{
return$this->redis->setnx($key,$value);
}
/**
*批量設(shè)置key
*@paramunknown$arr
*/
publicfunctionmset($arr)
{
return$this->redis->mset($arr);
}
/*************redis無序集合操作命令*****************/
/**
*返回集合中所有元素
*@paramunknown$key
*/
publicfunctionsMembers($key)
{
return$this->redis->sMembers($key);
}
/**
*求2個集合的差集
*@paramunknown$key1
*@paramunknown$key2
*/
publicfunctionsDiff($key1,$key2)
{
return$this->redis->sDiff($key1,$key2);
}
/**
*添加集合。由于版本問題,擴(kuò)展不支持批量添加。這里做了封裝
*@paramunknown$key
*@paramstring|array$value
*/
publicfunctionsAdd($key,$value)
{
if(!is_array($value))
$arr=array($value);
else
$arr=$value;
foreach($arras$row)
$this->redis->sAdd($key,$row);
}
/**
*返回?zé)o序集合的元素個數(shù)
*@paramunknown$key
*/
publicfunctionscard($key)
{
return$this->redis->scard($key);
}
/**
*從集合中刪除一個元素
*@paramunknown$key
*@paramunknown$value
*/
publicfunctionsrem($key,$value)
{
return$this->redis->srem($key,$value);
}
/*************redis管理操作命令*****************/
/**
*選擇數(shù)據(jù)庫
*@paramint$dbId數(shù)據(jù)庫ID號
*@returnbool
*/
publicfunctionselect($dbId)
{
$this->dbId=$dbId;
return$this->redis->select($dbId);
}
/**
*清空當(dāng)前數(shù)據(jù)庫
*@returnbool
*/
publicfunctionflushDB()
{
return$this->redis->flushDB();
}
/**
*返回當(dāng)前庫狀態(tài)
*@returnarray
*/
publicfunctioninfo()
{
return$this->redis->info();
}
/**
*同步保存數(shù)據(jù)到磁盤
*/
publicfunctionsave()
{
return$this->redis->save();
}
/**
*異步保存數(shù)據(jù)到磁盤
*/
publicfunctionbgSave()
{
return$this->redis->bgSave();
}
/**
*返回最后保存到磁盤的時間
*/
publicfunctionlastSave()
{
return$this->redis->lastSave();
}
/**
*返回key,支持*多個字符,?一個字符
*只有*表示全部
*@paramstring$key
*@returnarray
*/
publicfunctionkeys($key)
{
return$this->redis->keys($key);
}
/**
*刪除指定key
*@paramunknown$key
*/
publicfunctiondel($key)
{
return$this->redis->del($key);
}
/**
*判斷一個key值是不是存在
*@paramunknown$key
*/
publicfunctionexists($key)
{
return$this->redis->exists($key);
}
/**
*為一個key設(shè)定過期時間單位為秒
*@paramunknown$key
*@paramunknown$expire
*/
publicfunctionexpire($key,$expire)
{
return$this->redis->expire($key,$expire);
}
/**
*返回一個key還有多久過期,單位秒
*@paramunknown$key
*/
publicfunctionttl($key)
{
return$this->redis->ttl($key);
}
/**
*設(shè)定一個key什么時候過期,time為一個時間戳
*@paramunknown$key
*@paramunknown$time
*/
publicfunctionexprieAt($key,$time)
{
return$this->redis->expireAt($key,$time);
}
/**
*關(guān)閉服務(wù)器鏈接
*/
publicfunctionclose()
{
return$this->redis->close();
}
/**
*關(guān)閉所有連接
*/
publicstaticfunctioncloseAll()
{
foreach(static::$_instanceas$o)
{
if($oinstanceofself)
$o->close();
}
}
/**這里不關(guān)閉連接,因為session寫入會在所有對象銷毀之后。
publicfunction__destruct()
{
return$this->redis->close();
}
**/
/**
*返回當(dāng)前數(shù)據(jù)庫key數(shù)量
*/
publicfunctiondbSize()
{
return$this->redis->dbSize();
}
/**
*返回一個隨機(jī)key
*/
publicfunctionrandomKey()
{
return$this->redis->randomKey();
}
/**
*得到當(dāng)前數(shù)據(jù)庫ID
*@returnint
*/
publicfunctiongetDbId()
{
return$this->dbId;
}
/**
*返回當(dāng)前密碼
*/
publicfunctiongetAuth()
{
return$this->auth;
}
publicfunctiongetHost()
{
return$this->host;
}
publicfunctiongetPort()
{
return$this->port;
}
publicfunctiongetConnInfo()
{
returnarray(
'host'=>$this->host,
'port'=>$this->port,
'auth'=>$this->auth
);
}
/*********************事務(wù)的相關(guān)方法************************/
/**
*監(jiān)控key,就是一個或多個key添加一個樂觀鎖
*在此期間如果key的值如果發(fā)生的改變,剛不能為key設(shè)定值
*可以重新取得Key的值。
*@paramunknown$key
*/
publicfunctionwatch($key)
{
return$this->redis->watch($key);
}
/**
*取消當(dāng)前鏈接對所有key的watch
*EXEC命令或DISCARD命令先被執(zhí)行了的話,那么就不需要再執(zhí)行UNWATCH了
*/
publicfunctionunwatch()
{
return$this->redis->unwatch();
}
/**
*開啟一個事務(wù)
*事務(wù)的調(diào)用有兩種模式Redis::MULTI和Redis::PIPELINE,
*默認(rèn)是Redis::MULTI模式,
*Redis::PIPELINE管道模式速度更快,但沒有任何保證原子性有可能造成數(shù)據(jù)的丟失
*/
publicfunctionmulti($type=\Redis::MULTI)
{
return$this->redis->multi($type);
}
/**
*執(zhí)行一個事務(wù)
*收到EXEC命令后進(jìn)入事務(wù)執(zhí)行,事務(wù)中任意命令執(zhí)行失敗,其余的命令依然被執(zhí)行
*/
publicfunctionexec()
{
return$this->redis->exec();
}
/**
*回滾一個事務(wù)
*/
publicfunctiondiscard()
{
return$this->redis->discard();
}
/**
*測試當(dāng)前鏈接是不是已經(jīng)失效
*沒有失效返回+PONG
*失效返回false
*/
publicfunctionping()
{
return$this->redis->ping();
}
publicfunctionauth($auth)
{
return$this->redis->auth($auth);
}
/*********************自定義的方法,用于簡化操作************************/
/**
*得到一組的ID號
*@paramunknown$prefix
*@paramunknown$ids
*/
publicfunctionhashAll($prefix,$ids)
{
if($ids==false)
returnfalse;
if(is_string($ids))
$ids=explode(',',$ids);
$arr=array();
foreach($idsas$id)
{
$key=$prefix.'.'.$id;
$res=$this->hGetAll($key);
if($res!=false)
$arr[]=$res;
}
return$arr;
}
/**
*生成一條消息,放在redis數(shù)據(jù)庫中。使用0號庫。
*@paramstring|array$msg
*/
publicfunctionpushMessage($lkey,$msg)
{
if(is_array($msg)){
$msg=json_encode($msg);
}
$key=md5($msg);
//如果消息已經(jīng)存在,刪除舊消息,已當(dāng)前消息為準(zhǔn)
//echo$n=$this->lRem($lkey,0,$key)."\n";
//重新設(shè)置新消息
$this->lPush($lkey,$key);
$this->setex($key,3600,$msg);
return$key;
}
/**
*得到條批量刪除key的命令
*@paramunknown$keys
*@paramunknown$dbId
*/
publicfunctiondelKeys($keys,$dbId)
{
$redisInfo=$this->getConnInfo();
$cmdArr=array(
'redis-cli',
'-a',
$redisInfo['auth'],
'-h',
$redisInfo['host'],
'-p',
$redisInfo['port'],
'-n',
$dbId,
);
$redisStr=implode('',$cmdArr);
$cmd="{$redisStr}KEYS\"{$keys}\"|xargs{$redisStr}del";
return$cmd;
}
}

以上就時扣丁學(xué)堂對PHP實現(xiàn)的Redis操作通用類示例的簡述,希望大家多加瀏覽,方便大家查閱,更多的讓大家去了解PHP,如果有對PHP感興趣的朋友,想要了解更多,請登錄扣丁學(xué)堂官網(wǎng),或關(guān)注微信公眾號,了解更多知識,更有大量PHP在線視頻教程等你來學(xué)習(xí)觀看?。?



扣丁學(xué)堂微信公眾號

【關(guān)注微信公眾號獲取更多學(xué)習(xí)資料】

 


查看更多關(guān)于“php培訓(xùn)資訊”的相關(guān)文章>>



標(biāo)簽: Python Python培訓(xùn) Python在線視頻教程 Python入門 Python基礎(chǔ)

熱門專區(qū)

暫無熱門資訊

課程推薦

微信
微博
15311698296

全國免費咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號中關(guān)村智誠科創(chuàng)大廈4層
京ICP備2021002079號-2   Copyright ? 2017 - 2022
返回頂部 返回頂部