1. 程式人生 > >PHP操作Redis常用技巧總結

PHP操作Redis常用技巧總結

一、Redis連線與認證

1 2 3 4 //連線引數:ip、埠、連線超時時間,連線成功返回true,否則返回false $ret = $redis ->connect( '127.0.0.1'
, 6379, 30); //密碼認證:成功返回true,否則返回false $ret = $redis ->auth( '123456' );

二、String操作

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 //設定鍵值:成功返回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' );

三、Hash操作

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 //為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);

四、List操作

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 //從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);

五、Set操作

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 //將一個元素加入集合,已經存在集合中的元素則忽略。若集合不存在則先建立,若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' );

六、Zset操作

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 //將一個或多個成員元素及其分數值加入到有序集當中。如果某個成員已經是有序集的成員,則更新這個成員的分數值,並通過重新插入這個成員元素,來保證該成員在正確的位置上。分數值可以是整數值或雙精度浮點數。 $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