這篇文章主要介紹了PHP操做Redis經常使用技巧,結合實例形式總結分析了php針對redis的鏈接、認證、string、hash等操做技巧與注意事項,須要的朋友能夠參考下php
本文實例講述了PHP操做Redis經常使用技巧。分享給你們供你們參考,具體以下:redis
1、Redis鏈接與認證數組
//鏈接參數:ip、端口、鏈接超時時間,鏈接成功返回true,不然返回false
$ret
=
$redis
->connect(
'127.0.0.1'
, 6379, 30);
//密碼認證:成功返回true,不然返回false
$ret
=
$redis
->auth(
'123456'
);
|
2、String操做app
//設置鍵值:成功返回true,不然返回false
$redis
->set(
'mystr'
,
'Welcome!'
);
//獲取鍵值:成功返回String類型鍵值,若key不存在或不是String類型則返回false
$ret
=
$redis
->get(
'mystr'
);
//從某個key所存儲的字符串的指定偏移量開始,替換爲另外一指定字符串,成功返回替換後新字符串的長度。
$ret
=
$redis
->setRange(
'mystr'
, 7,
' to Beijing!'
);
//獲取存儲在指定key中字符串的子字符串。
$ret
=
$redis
->getRange(
'mystr'
, 0, 6);
//設置新值,返回舊值:若key不存在則設置值,返回false
$ret
=
$redis
->getSet(
'mystr'
,
'hi man'
);
//一次設置多個鍵值對:成功返回true。
$ret
=
$redis
->mset([
'name'
=>
'jet'
,
'age'
=> 18]);
//一次獲取多個key的值:返回一個鍵值對數組,其中不存在的key值爲false。
$ret
=
$redis
->mget([
'name'
,
'age'
]);
//設置指定key的值及其過時時間,單位:秒。
//參數:鍵名,過時時間,鍵值。成功返回true。
$ret
=
$redis
->setex(
'name'
, 10,
'jetwu'
);
//以毫秒爲單位設置指定key的值和過時時間。成功返回true。
$ret
=
$redis
->psetex(
'name'
, 10,
'jetwu'
);
//key的值不存在時,才爲其設置值。key不存在且設置成功返回true,不然返回false。
$ret
=
$redis
->setnx(
'name'
,
'boby'
);
//setnx命令的批量操做。只有在給定全部key都不存在的時候才能設置成功,只要其中一個key存在,全部key都沒法設置成功。
$ret
=
$redis
->msetnx([
'country'
=>
'China'
,
'city'
=>
'Shenzhen'
]);
//獲取指定key存儲的字符串的長度,key不存在返回0,不爲字符串返回false。
$ret
=
$redis
->
strlen
(
'name'
);
//將指定key存儲的數字值增長1。若key不存在會先初始化爲0再增長1,若key存儲的不是整數值則返回false。成功返回key新值。
$ret
=
$redis
->incr(
'age'
);
//給指定key存儲的數字值增長指定增量值。
$ret
=
$redis
->incrBy(
'age'
, 10);
//給指定key存儲的數字值增長指定浮點數增量。
$ret
=
$redis
->incrByFloat(
'age'
, 1.5);
//將指定key存儲的數字值減一。
$ret
=
$redis
->decr(
'age'
);
//將指定key存儲的數字值減去指定減量值。
$ret
=
$redis
->decrBy(
'age'
, 10);
//爲指定key追加值到原值末尾,若key不存在則相對於set()函數。
$ret
=
$redis
->append(
'mystr'
,
'haha'
);
|
3、Hash操做函數
//爲hash表中的字段賦值。成功返回1,失敗返回0。若hash表不存在會先建立表再賦值,若字段已存在會覆蓋舊值。
$ret
=
$redis
->hSet(
'user'
,
'realname'
,
'jetwu'
);
//獲取hash表中指定字段的值。若hash表不存在則返回false。
$ret
=
$redis
->hGet(
'user'
,
'realname'
);
//查看hash表的某個字段是否存在,存在返回true,不然返回false。
$ret
=
$redis
->hExists(
'user'
,
'realname'
);
//刪除hash表的一個字段,不支持刪除多個字段。成功返回1,不然返回0。
$ret
=
$redis
->hDel(
'user'
,
'realname'
);
//同時設置某個hash表的多個字段值。成功返回true。
$ret
=
$redis
->hMset(
'user'
, [
'name'
=>
'jet'
,
'age'
=> 18]);
//同時獲取某個hash表的多個字段值。其中不存在的字段值爲false。
$ret
=
$redis
->hMget(
'user'
, [
'name'
,
'age'
]);
//獲取某個hash表全部的字段和值。
$ret
=
$redis
->hGetAll(
'user'
);
//獲取某個hash表全部字段名。hash表不存在時返回空數組,key不爲hash表時返回false。
$ret
=
$redis
->hKeys(
'user'
);
//獲取某個hash表全部字段值。
$ret
=
$redis
->hVals(
'user'
);
//爲hash表中不存在的字段賦值。若hash表不存在則先建立,若字段已存在則不作任何操做。設置成功返回true,不然返回false。
$ret
=
$redis
->hSetNx(
'user'
,
'realname'
,
'jetwu'
);
//獲取某個hash表的字段數量。若hash表不存在返回0,若key不爲hash表則返回false。
$ret
=
$redis
->hLen(
'user'
);
//爲hash表中的指定字段加上指定增量值,若增量值爲負數則至關於減法操做。若hash表不存在則先建立,若字段不存在則先初始化值爲0再進行操做,若字段值爲字符串則返回false。設置成功返回字段新值。
$ret
=
$redis
->hIncrBy(
'user'
,
'age'
, 10);
//爲hash表中的指定字段加上指定浮點數增量值。
$ret
=
$redis
->hIncrBy(
'user'
,
'age'
, 1.5);
|
4、List操做spa
//從list頭部插入一個值。
$ret
=
$redis
->lPush(
'city'
,
'guangzhou'
);
//從list尾部插入一個值。
$ret
=
$redis
->rPush(
'city'
,
'guangzhou'
);
//獲取列表指定區間中的元素。0表示列表第一個元素,-1表示最後一個元素,-2表示倒數第二個元素。
$ret
=
$redis
->lrange(
'city'
, 0, -1);
//查看隊列全部元素
//將一個插入已存在的列表頭部,列表不存在時操做無效。
$ret
=
$redis
->lPushx(
'city'
,
'hangzhou'
);
//將一個或多個值插入已存在的列表尾部,列表不存在時操做無效。
$ret
=
$redis
->rPushx(
'city'
,
'hangzhou'
);
//移除並返回列表的第一個元素,若key不存在或不是列表則返回false。
$ret
=
$redis
->lPop(
'city'
);
//移除並返回列表的最後一個元素,若key不存在或不是列表則返回false。
$ret
=
$redis
->rPop(
'city'
);
//移除並獲取列表的第一個元素。若是列表沒有元素則會阻塞列表直到等待超時或發現可彈出元素爲止。
//參數:key,超時時間(單位:秒)
//返回值:[0=>key,1=>value],超時返回[]
$ret
=
$redis
->blPop(
'city'
, 10);
//移除並獲取列表的最後一個元素。若是列表沒有元素則會阻塞列表直到等待超時或發現可彈出元素爲止。
//參數:key,超時時間(單位:秒)
//返回值:[0=>key,1=>value],超時返回[]
$ret
=
$redis
->brPop(
'city'
, 10);
//移除列表中最後一個元素,將其插入另外一個列表頭部,並返回這個元素。若源列表沒有元素則返回false。
$ret
=
$redis
->rpoplpush(
'city'
,
'city2'
);
//移除列表中最後一個元素,將其插入另外一個列表頭部,並返回這個元素。若是列表沒有元素則會阻塞列表直到等待超時或發現可彈出元素爲止。
//參數:源列表,目標列表,超時時間(單位:秒)
//超時返回false
$ret
=
$redis
->brpoplpush(
'city'
,
'city2'
, 10);
//返回列表長度。
$ret
=
$redis
->lLen(
'city'
);
//經過索引獲取列表中的元素。若索引超出列表範圍則返回false。
$ret
=
$redis
->lindex(
'city'
, 0);
//經過索引設置列表中元素的值。如果索引超出範圍,或對一個空列表進行lset操做,則返回false。
$ret
=
$redis
->lSet(
'city'
, 2,
'changsha'
);
//在列表中指定元素前或後面插入元素。若指定元素不在列表中,或列表不存在時,不執行任何操做。
//參數:列表key,Redis::AFTER或Redis::BEFORE,基準元素,插入元素
//返回值:插入成功返回插入後列表元素個數,若基準元素不存在返回-1,若key不存在返回0,若key不是列表返回false。
$ret
=
$redis
->lInsert(
'city'
, Redis::AFTER,
'changsha'
,
'nanjing'
);
//根據第三個參數count的值,移除列表中與參數value相等的元素。
//count > 0 : 從表頭開始向表尾搜索,移除與value相等的元素,數量爲count。
//count < 0 : 從表尾開始向表頭搜索,移除與value相等的元素,數量爲count的絕對值。
//count = 0 : 移除表中全部與value相等的值。
//返回實際刪除元素個數
$ret
=
$redis
->lrem(
'city'
,
'guangzhou'
, -2);
//對一個列表進行修剪,只保留指定區間的元素,其餘元素都刪除。成功返回true。
$ret
=
$redis
->ltrim(
'city'
, 1, 4);
|
5、Set操做code
//將一個元素加入集合,已經存在集合中的元素則忽略。若集合不存在則先建立,若key不是集合類型則返回false,若元素已存在返回0,插入成功返回1。
$ret
=
$redis
->sAdd(
'myset'
,
'hello'
);
//返回集合中全部成員。
$ret
=
$redis
->sMembers(
'myset'
);
//判斷指定元素是不是指定集合的成員,是返回true,不然返回false。
$ret
=
$redis
->sismember(
'myset'
,
'hello'
);
//返回集合中元素的數量。
$ret
=
$redis
->scard(
'myset'
);
//移除並返回集合中的一個隨機元素。
$ret
=
$redis
->sPop(
'myset'
);
//返回集合中的一個或多個隨機成員元素,返回元素的數量和狀況由函數的第二個參數count決定:
//若是count爲正數,且小於集合基數,那麼命令返回一個包含count個元素的數組,數組中的元素各不相同。
//若是count大於等於集合基數,那麼返回整個集合。
//若是count爲負數,那麼命令返回一個數組,數組中的元素可能會重複出現屢次,而數組的長度爲count的絕對值。
$ret
=
$redis
->sRandMember(
'myset'
, 2);
//移除集合中指定的一個元素,忽略不存在的元素。刪除成功返回1,不然返回0。
$ret
=
$redis
->srem(
'myset'
,
'hello'
);
//迭代集合中的元素。
//參數:key,迭代器變量,匹配模式,每次返回元素數量(默認爲10個)
$ret
=
$redis
->sscan(
'myset'
,
$it
,
'a*'
, 5);
//將指定成員從一個源集合移動到一個目的集合。若源集合不存在或不包含指定元素則不作任何操做,返回false。
//參數:源集合,目標集合,移動元素
$ret
=
$redis
->sMove(
'myset'
,
'myset2'
,
'aaa'
);
//返回全部給定集合之間的差集,不存在的集合視爲空集。
$ret
=
$redis
->sDiff(
'myset'
,
'myset2'
,
'myset3'
);
//將全部給定集合之間的差集存儲在指定的目的集合中。若目的集合已存在則覆蓋它。返回差集元素個數。
//參數:第一個參數爲目標集合,存儲差集。
$ret
=
$redis
->sDiffStore(
'myset3'
,
'myset'
,
'myset2'
);
//返回全部給定集合的交集,不存在的集合視爲空集。
$ret
=
$redis
->sInter(
'myset'
,
'myset2'
,
'myset3'
);
//將全部給定集合的交集存儲在指定的目的集合中。若目的集合已存在則覆蓋它。返回交集元素個數。
//參數:第一個參數爲目標集合,存儲交集。
$ret
=
$redis
->sInterStore(
'myset4'
,
'myset'
,
'myset2'
,
'myset3'
);
//返回全部給定集合的並集,不存在的集合視爲空集。
$ret
=
$redis
->sUnion(
'myset'
,
'myset2'
,
'myset3'
);
//將全部給定集合的並集存儲在指定的目的集合中。若目的集合已存在則覆蓋它。返回並集元素個數。
//參數:第一個參數爲目標集合,存儲並集。
$ret
=
$redis
->sUnionStore(
'myset4'
,
'myset'
,
'myset2'
,
'myset3'
);
|
6、Zset操做排序
//將一個或多個成員元素及其分數值加入到有序集當中。若是某個成員已是有序集的成員,則更新這個成員的分數值,並經過從新插入這個成員元素,來保證該成員在正確的位置上。分數值能夠是整數值或雙精度浮點數。
$ret
=
$redis
->zAdd(
'scores'
, 98,
'English'
, 90,
'physics'
);
//返回有序集中指定區間內的成員。成員按分數值遞增排序,分數值相同的則按字典序來排序。
//參數:第四個參數表示是否返回各個元素的分數值,默認爲false。
$ret
=
$redis
->zRange(
'scores'
, 0, -1, true);
//查看Zset全部成員以及它們各自的分數值
//返回有序集中指定區間內的成員。成員按分數值遞減排序,分數值相同的則按字典序的逆序來排序。
$ret
=
$redis
->zReverseRange(
'scores'
, 0, -1, true);
//返回有序集中指定分數區間的成員列表,按分數值遞增排序,分數值相同的則按字典序來排序。默認使用閉區間。
$ret
=
$redis
->zRangeByScore(
'scores'
, 90, 100, [
'withscores'
=>true]);
//返回有序集中指定分數區間的成員列表,按分數值遞減排序,分數值相同的則按字典序的逆序來排序。注意,區間表示的時候大值在前,小值在後,默認使用閉區間。
$ret
=
$redis
->zRevRangeByScore(
'scores'
, 100, 90, [
'withscores'
=>true]);
//迭代有序集合中的元素。
//返回值:[元素名=>分數值,,..]
$ret
=
$redis
->zscan(
'scores'
,
$it
,
''
, 10);
//返回指定有序集的元素數量。
$ret
=
$redis
->zCard(
'scores'
);
//返回有序集中指定分數區間的成員數量。
$ret
=
$redis
->zCount(
'scores'
, 90, 100);
//返回有序集中指定成員的分數值。若成員不存在則返回false。
$ret
=
$redis
->zScore(
'scores'
,
'math'
);
//返回有序集中指定成員的排名,按分數值遞增排序。分數值最小者排名爲0。
$ret
=
$redis
->zRank(
'scores'
,
'chemistry'
);
//返回有序集中指定成員的排名,按分數值遞減排序。分數值最大者排名爲0。
$ret
=
$redis
->zRevRank(
'scores'
,
'chemistry'
);
//移除有序集中的一個或多個成員,忽略不存在的成員。返回刪除的元素個數。
$ret
=
$redis
->zRem(
'scores'
,
'chemistry'
,
'English'
);
//移除有序集中指定排名區間的全部成員。
$ret
=
$redis
->zRemRangeByRank(
'scores'
, 0, 2);
//移除有序集中指定分數值區間的全部成員。
$ret
=
$redis
->zRemRangeByScore(
'scores'
, 80, 90);
//對有序集中指定成員的分數值增長指定增量值。若爲負數則作減法,如有序集不存在則先建立,如有序集中沒有對應成員則先添加,最後再操做。
$ret
=
$redis
->zIncrBy(
'scores'
, 2,
'Chinese'
);
//計算給定一個或多個有序集的交集,並將其存儲到一個目的有序集中。結果集中某個成員的分數值是全部給定集下該成員分數值之和。
$ret
=
$redis
->zinterstore(
'zset3'
,
'zset2'
,
'zset1'
);
//計算給定一個或多個有序集的並集,並將其存儲到一個目的有序集中。結果集中某個成員的分數值是全部給定集下該成員分數值之和。
$ret
=
$redis
->zunionstore(
'zset3'
,
'zset2'
,
'zset1'
);