redis的資料型別有序集合:sorted set,其原生命令和php操作Redis sorted set函式介紹
sorted set型別介紹
sorted set是string型別元素的集合。有序集合成員是唯一的,不能出現重複的資料;有序集合和集合的區別在於每個元素都會關聯一個double型別的分數,redis可以通過分數為集合中的成員進行從小到大的排序,有序集合預設的是按分數從小到大排序的;集合的成員是唯一的,但分數是可以重複的。有序集合是通過雜湊表實現的,最大的成員數達到2^32-1個
Sorted Set原生命令
命令 | 命令描述 | 例項 |
---|---|---|
ZADD key score1 member1 [ score2 member2] | 將一個或者多個成員元素及其分數值加入到有序集中;如果有序集合key不存在,則建立該有序集合並執行ZADD操作;如果其中有成員已經存在於key中,則更新該成員的分數值,並通過重新插入該成員以確保該成員在正確的位置;分數值可以是整數值或雙精度浮點數;執行ZADD操作:如果key不是有序集,則返回一個錯誤;成功則返回成功插入的元素個數,不包括被更新的,已經存在的成員。 | ZADD zset1 3 key1 3.23 key2,返回:2 |
ZRANGE key start stop [WITHSCORES] | 返回有序集中指定區間內的成員,其中成員的位置按分數值遞增(從小到大)排序,如果分數值相同的成員則按字典序進行排列;WITHSCORES不存在則返回不含分數值的成員,存在則返回含有分數值的成員;從頭往尾排:0,1,.....,N,從尾往頭排:-N,......,-1。 | ZRANGE zset1 0 -1,返回:"key2","key3","key4";ZRANGE zset1 0 -1 withscores,返回:"key2","2","key3","3.23","key4","4.23" |
ZREVRANGE key start stop [WITHSCORES] | 和ZRANGE 命令類似,區別在於排序方式按分數遞減,相同分數按字典序的逆序排列 | 見ZRANGE 命令的例項 |
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] | 返回有序集合中指定分數區間內的成員,按成員的分數值進行遞增(從小到大)排序,相同分數值則按字典序進行排列;預設情況下是分數區間取值是閉區間,可以在min,max前加"("表示開區間 | ZRANGEBYSCORE zset1 2 4,返回:key2 key1 key4 |
ZREVRANGEBYSCORE key max min [WITHSCORES] | 返回有序集合key中指定分數區間的所有成員,並按照分數值從大到小的順序排列,具有相同分數值的成員按照字典序逆序排列,其他方面和ZRANGEBYSCORE命令相同 | ZREVRANGEBYSCORE zset1 4 2 withscores,返回:"key4": "4","key1":"3.546","key2": "3.23" |
ZRANGEBYLEX key min max [LIMIT offset count] | 通過字典序返回指定區間內的成員 | ZRANGEBYLEX myzset - [l,返回:key2 key1 key4,key3 |
ZCARD key | 用於計算有序集key中成員的個數,key不存在時返回0 | ZCARD zset1,返回:2 |
ZCOUNT key min max | 返回有序集key指定分數區間[min,max]內的成員的數量 | ZCOUNT zset1 2 4,返回:3 |
ZREM key member1 [member2] | 移除有序集key中指定的一個或多個成員,成功則返回移除的成員的個數,成員不存在則忽略不計數;key存在但不是有序集返回一個錯誤。 | ZREM zset1 key1 key5,返回:1 |
ZREMRANGEBYLEX key min max | 移除有序集合key中給定的字典區間中的所有成員;返回被成功移除的成員的個數,不包括被忽略的成員,redis-server>2.8.9以上才能使用; | ZREMRANGEBYLEX zset1 [c [l,返回:4 |
ZREMRANGEBYRANK key start stop | 移除有序集合key中給定的排名區間的所有的成員,返回被移除的成員的個數 | ZREMRANGEBYRANK zset1 1 2,返回:2 |
ZREMRANGEBYSCORE key min max | 移除有序集key中給定分數區間內的所有成員,返回成功移除成員的個數 | ZREMRANGEBYSCORE zset2 0 5,返回:1 |
ZSCORE key member | 取得有序集key中成員member的分數值,以字串的形式表示;如果member不在有序集中或key不存在,則返回nil。 | ZSCORE zset1 key2,返回:‘3.23’ |
ZINCRBY key increment member | 對有序集合key中的指定成員member新增增量值increment;increment可以是整型也可以是雙精度浮點型數值,increment可以是負數(減);若key不存在或member不是可以的成員是,則該命令等同於 ZADD key increment member;該命令返回member新的分數值 | ZINCRBY zset1 2 key4,返回:6 |
ZLEXCOUNT key min max | 返回有序集合key中指定字典序區間中成員的數量,redis-server>2.8.9以上才能使用,ZLEXCOUNT key - +:獲取所有的成員數量 | ZLEXCOUNT myzset [a [l,返回:4 |
ZINTERSTORE destination numkeys key [key ...] | 計算給定的有序集合的交集並存儲到目標有序集合destination上,給定的有序集合key必須指定其個數numkeys;預設情況下,結果集中某個成員的分數值是所有給定的有序集該成員的分數值之和;返回目標結果集中成員的個數 | ZINTERSTORE zset3 2 zset1 zset2,返回:4 |
ZUIO/">NIONSTORE destination numkeys key [key ...] | 計算給定的一個或多個有序集的並集並將結果集儲存到目標集合destination中;給定的有序集必須指定其個數numkeys;預設情況下,結果集中某個成員的分數值等於給定的有序集該成員的分數值之和;返回目標結果集中成員的個數 | ZUNIONSTORE zset3 2 zset1 zset2,返回值:4 |
ZRANK key member | 返回有序集合中指定成員member的排名(從0開始);有序整合員按分數值從小到大排列; | ZRANK zset1 key4,返回:2 |
ZREVRANK key member | 返回有序集合中指定成員member的排名(從0開始),有序整合員按分數值從大到小排列;和ZRANK相反 | ZREVRANK zset1 key4,返回:1 |
ZSCAN key cursor [MATCH pattern] [COUNT count] | 用迭代器cursor遍歷有序集合key,並用pattern匹配特定的元素,count指定返回成員的個數;返回的每個元素都是一個有序集合元素 |
php操作redis Sorted Set的函式
-
zAdd(key,score1,value1,[score2,value2, ....])函式
* 說明:將一個或多個value成員加入到有序集合key中,若value已經存在,則更新value的分數值;
* 引數:key(有序集合名稱),value(將要插入有序集合key的成員),score(成員value對應的分數值)
* 返回值:插入成功返回插入成員的個數,失敗則返回0
*php$ret = $redis->zAdd($key1,3,'k1',5,'k2'); /*2*/
-
zRange(key,start,stop,[withscores]),zRevRange(key,start,stop,[withscores])函式
* 說明:取出有序集key中給定排名區間[start,stop]的所有成員並寫入陣列中;withscores表示是否取出成員及其分數值,預設值為false(不取出成員的分數值);成員排名從前往後(0,1,2...),從後往前(...-2,-1);zRange和zRevRange兩者類似,區別在於:zRange()返回的陣列按分數值從小到大排列,zRevRange()返回的陣列按分數值從大到小排列
* 引數:key(有序集合名稱),start(排名區間的左半邊),stop(排名區間的右半邊),withscores(可選項:預設為false)
* 返回:withscores為true成功則返回給定區間內成員及其分數值組成的關聯陣列,withscores為false成功則返回給定區間內的所有成員組成的索引陣列,失敗則返回false
*注意: redis的版本>=3.2才能使用count引數
*php$ret = $redis->zRange($key1,0,-1); /* array(2) { [0]=> string(2) "k1" [1]=> string(2) "k2" } */$res = $redis->zRange($key1,0,-1,true); /* array(2) { ["k1"]=> string(1) "3" ["k2"]=> string(1) "5" } */$ret1 = $redis->zRevRange($key1,0,-1);/* array(2) { [0]=> string(2) "k2" [1]=> string(2) "k1" } */$res1 = $redis->zRevRange($key1,0,-1,true);/* array(2) { ["k2"]=> string(1) "5" ["k1"]=> string(1) "3" } */
-
zRangeByScore(key,start,stop,options), zRevRangeByScore(key)函式
* 說明:取出給定有序集合key中指定分數區間內的所有成員並組成陣列返回;zRangeByScore()返回的陣列按分數值從小到大排序,zRevRangeByScore()則相反;
* 引數:key(有序集合名稱),start(指定分數值區間的左半邊),stop(指定分數值區間的右半邊),options(options包含是兩個可選項withscores的陣列,limit;withscores是bool型數值,表示返回的陣列中是否包含成員分數值,true包含,false不包含;limit是陣列形式,limit=>array($offset, $count), $offset表示取值的偏移量, $count限制返回成員的個數 )
* 返回:成功則返回取出成員組成的陣列,失敗則返回false
*php$ret = $redis->zRangeByScore($key1,2,6);/* array(2) { [0]=> string(2) "k1" [1]=> string(2) "k2" }*/$res = $redis->zRangeByScore($key1,2,6,array('withscores' => true)); /* array(2) { ["k1"]=> string(1) "3" ["k2"]=> string(1) "5" }*/$rea = $redis->zRangeByScore($key1,2,6,array('withscores' => true,'limit'=>array(1,1))); /*array(1) { ["k2"]=> string(1) "5" } */
-
zRangeByLex(key,min,max,[offset],[limit])函式
* 說明:取出給定的有序集合key中指定字典序區間的所有成員;offset表示偏移量(從偏移量處開始取值),limit限制返回的成員個數;“(”表示開區間,“[”表示閉區間;該方法必須是3個或5個引數
* 引數:key(有序集合名稱),min(字典序區間的左半邊),max(字典序區間的右半邊 ),offset(可選引數,偏移量),limit(可選引數,限制返回的成員的個數)
* 返回:成功則返回取出成員組成的陣列,失敗則返回false
*注意 :redis-server > 2.8.9才能使用該方法
*php$ret = $redis->zRangeByLex($key1,'[a','[l'); /* array(2) { [0]=> string(2) "k1" [1]=> string(2) "k2" }*/
-
zCard(key), zSize(key)函式
* 說明:獲取有序集合key的大小(成員的個數),兩個函式功能是一樣的
* 引數:key(有序集合名稱)
* 返回:執行成功返回有序集合的大小,失敗則返回false
*php$ret = $redis->zCard($key1); /*2*/$res = $redis->zSize($key1); /*2*/
-
zCount(key,start,stop)函式
* 說明:獲取有序集合key中在給定分數值區間內的全部成員的個數
* 引數: key(有序集合的名稱),start(分數區間的左半邊,可以為負值),stop(分數值區間的右半邊,可以為負值)
* 返回:成功返回給定分數值區間內的成員的個數,失敗返回false
*php$ret = $redis->zCount($key1,0,4); /*1*/$res = $redis->zCount($key1,-2,0); /*0*/
-
zRem(key,member), zDelete(key,member)函式
* 說明:從有序集key中刪除成員member,兩個函式功能是一樣的
* 引數:key(有序集合的名稱),member(將要刪除的成員)
* 返回值:執行成功返回1,失敗返回0
*php$ret = $redis->zRem($key1,'k1'); /* 1*/$res = $redis->zDelete($key1,'k2'); /* 1*/
-
zRemRangeByScore(key,start,stop), zDeleteRangeByScore(key,start,stop)函式
* 說明: 刪除有序集合key中指定分數值區間內的所有成員,兩者的功能是一樣的
* 引數: key(有序集合的名稱),start(分數值區間的左半邊,可以是負值),stop(分數值區間的右半邊,可以是負值)
* 返回:成功則返回刪除成員的個數,失敗則返回false
*php$ret = $redis->zRemRangeByScore($key1,1,3);/*1*/$res = $redis->zDeleteRangeByScore($key1,6,12); /*2*/
-
zRemRangeByRank(key,start,stop), zDeleteRangeByRank(key,start,stop)函式
* 說明:移除有序集合key中指定排名區間內的所有成員,兩者的功能是一樣的;排名從0開始依次增加1
* 引數:key(有序集合的名稱),start(排名區間的左半邊,可以為負值),stop(排名區間的右半邊,可以為負值)
* 返回:成功返回被成功移除的成員的個數,失敗則返回false
*php$ret = $redis->zRemRangeByRank($key1,1,2); /*2*/$res = $redis->zDeleteRangeByRank($key1,0,1); /*2*/
-
zScore(key,member)函式
* 說明:獲取給定有序集合key中成員member的分數值
* 引數:key(有序集合名稱),member(指定的成員)
* 返回:執行成功返回member的分數值;失敗則返回false
*php$ret = $redis->zScore($key1,'k2'); /* float(4) */
-
zIncrBy(key,value,member)函式
* 說明:給給定的有序集合key中的成員member的分數值加上一個增量value,如果member不存在,則給key新增一個成員member並複製value
* 引數:key(有序集合名稱),value(增量值),member(指定的成員)
* 返回:返回member的新值(浮點數)
*php$ret = $redis->zIncrBy($key1,3,'k2');/* float(7)*/
-
zInter(dstKey,srcKeyArr,,weightsArr,aggregateFunction)函式
* 說明:獲取給定的有序集組成的陣列srcKeyArr中成員的交集,並將返回值儲存到目標有序集合dstKey中;
* 引數:dstKey(目標有序集合),srcKeyArr(給定的有序集合組成的陣列),weightsArr(可選引數),aggregateFunction(可選引數)
* 返回:成功返回目標結果集dstKey的大小,失敗則返回false
*php$redis->zAdd($key2,3, 'k2' , 5 , 'k4');$ret = $redis->zInter($key3,array($key1,$key2)); /*int(2)*/$res = $redis->zRange($key3,0, -1, true); /* array(2) { ["k4"]=> string(1) "9" ["k2"]=> string(2) "10" }*/
-
zUnion(dstKey,srcKeyArr,weightsArr,aggregateFunction)函式
* 說明:獲取給定的有序集組成的陣列srcKeyArr中成員的並集,並將返回值儲存到dstKey集合中;
* 引數:dstKey(目標有序集合),srcKeyArr(給定的有序集合組成的陣列),weightsArr(可選引數),aggregateFunction(可選引數)
* 返回:成功返回目標結果集dstKey的大小,失敗則返回false
*php$ret = $redis->zUnion($key3,array($key1,$key2));/*int(5)*/$res = $redis->zRange($key3,0, -1, true);/*array(5) { ["k3"]=> string(1) "6" ["k1"]=> string(1) "8" ["k5"]=> string(1) "8" ["k4"]=> string(1) "9" ["k2"]=> string(2) "10" }*/
-
zRank(key,member), zRevRank(key,member)函式
* 說明:獲取給定有序集合key中指定成員member的排名;zRank最小的排名為0,zRevRank最大的排名為0
* 引數:key(有序集合名稱),member(給定的成員)
* 返回:成功返回該member的排名,失敗返回false
*php$ret = $redis->zRank($key1,'k2');/* int(2) */
-
zScan(key,iterator,pattern,count)函式
* 說明:用迭代器iterator遍歷指定模式pattern的有序集合key,並限制返回的成員個數count
* 引數:key(有序集合的名稱),iterator(迭代器),pattern(遍歷時的匹配條件),count(期望返回成員的數量)
* 返回:執行成功返回一個數組,失敗則返回false