PHPRedis ZSET命令
和Sets相比,Sorted Sets增加了一個權重引數score,使得集合中的元素能夠按score進行有序排列,
比如一個儲存全班同學成績的Sorted Sets,其集合value可以是同學的學號,而score就可以是其考試得分,這樣在資料插入集合的時候,就已經進行了天然的排序。
案例:可以用SortedSets來做帶權重的佇列,比如普通訊息的score為1,重要訊息的score為2,然後工作執行緒可以選擇按score的倒序來獲取工作任務。讓重要的任務優先執行。
Zset型別它是set的一個升級版本,在set的基礎上增加了順序,這一屬性在新增修改元素時可以指定,每次指定後,zset會自動按新的值調整順序。
1.zAdd
將一個或多個member元素及其score值加入到有序集key當中。
如果某個member已經是有序集的成員,那麼更新這個member的score值,並通過重新插入這個member元素,來保證該member在正確的位置上。
score值可以是整數值或雙精度浮點數。
如果key不存在,則建立一個空的有序集並執行ZADD操作。
當key存在但不是有序集型別時,返回一個錯誤。
$redis->zAdd('key', 1, 'val1');
2.zRange
返回有序集key中,指定區間內的成員。
其中成員的位置按score值遞增(從小到大)來排序。
具有相同score值的成員按字典序(lexicographical order)來排列。
如果你需要成員按score值遞減(從大到小)來排列,請使用ZREVRANGE命令。
下標引數start和stop都以0為底,也就是說,以0表示有序集第一個成員,以1表示有序集第二個成員,以此類推。
你也可以使用負數下標,以-1表示最後一個成員,-2表示倒數第二個成員,以此類推。
超出範圍的下標並不會引起錯誤。
比如說,當start的值比有序集的最大下標還要大,或是start > stop時,ZRANGE命令只是簡單地返回一個空列表。
另一方面,假如stop引數的值比有序集的最大下標還要大,那麼Redis將stop當作最大下標來處理。
可以通過使用WITHSCORES選項,來讓成員和它的score值一併返回,返回列表以value1,score1, ..., valueN,scoreN的格式表示。
客戶端庫可能會返回一些更復雜的資料型別,比如陣列、元組等。
$redis->zAdd('key1', 0, 'val0');
$redis->zAdd('key1', 2, 'val2');
$redis->zAdd('key1', 10, 'val10');
$redis->zRange('key1', 0, -1); /* array('val0', 'val2', 'val10') */
// with scores
$redis->zRange('key1', 0, -1, true); /* array('val0' => 0, 'val2' => 2, 'val10' => 10) */
3.zRevRange
返回有序集key中,指定區間內的成員。
其中成員的位置按score值遞減(從大到小)來排列。
$redis->zAdd('key', 0, 'val0');
$redis->zAdd('key', 2, 'val2');
$redis->zAdd('key', 10, 'val10');
$redis->zRevRange('key', 0, -1); /* array('val10', 'val2', 'val0') */
// with scores
$redis->zRevRange('key', 0, -1, true); /* array('val10' => 10, 'val2' => 2, 'val0' => 0) */
4.zRangeByScore 從小到大
返回有序集key中,所有score值介於min和max之間(包括等於min或max)的成員。有序整合員按score值遞增(從小到大)次序排列。
具有相同score值的成員按字典序(lexicographical order)來排列(該屬性是有序集提供的,不需要額外的計算)。
可選的LIMIT引數指定返回結果的數量及區間(就像SQL中的SELECT LIMIT offset, count),注意當offset很大時,定位offset的操作可能需要遍歷整個有序集,此過程最壞複雜度為O(N)時間。
可選的WITHSCORES引數決定結果集是單單返回有序集的成員,還是將有序整合員及其score值一起返回。
該選項自Redis 2.0版本起可用。
$redis->zAdd('key', 0, 'val0');
$redis->zAdd('key', 2, 'val2');
$redis->zAdd('key', 3, 'val3');
$redis->zAdd('key', 10, 'val10');
$redis->zRangeByScore('key', 0, 3); /* array('val0', 'val2') */
$redis->zRangeByScore('key', 0, 3, array('withscores' => TRUE); /* array('val0' => 0, 'val2' => 2) */
$redis->zRangeByScore('key', 0, 3, array('limit' => array(1, 1)); /* array('val2' => 2) */
$redis->zRangeByScore('key', 0, 3, array('limit' => array(1, 1)); /* array('val2') */
$redis->zRangeByScore('key', 0, 3, array('withscores' => TRUE, 'limit' => array(1, 1)); /* array('val2' => 2) */
limit(X,Y),X是偏移量,Y是獲取數量
$redis->zRangeByScore('key', 0, 3, array('limit' => array(1, 1)); /* array('val2' => 2) */
假如'limit' => array(1, 1),偏移量為1,獲取數為1,就是獲取的結果集中,偏移一個結果,並獲取一個結果,結果為0 => string 'val2' (length=4)
'limit' => array(1, 1) 偏移量為1,獲取數為2,就是獲取的結果集中,偏移一個結果,並獲取一個結果,結果為0 => string 'val2' 1 => string 'val3' (length=4)
5.zRevRangeByScore
和上述的基本相同,但是就是從大到小
4.zDelete
從有序集合中刪除指定的成員。
$redis->zAdd('key', 0, 'val0');
$redis->zAdd('key', 2, 'val2');
$redis->zAdd('key', 10, 'val10');
$redis->zDelete('key', 'val2');
$redis->zRange('key', 0, -1); /* array('val0', 'val10') */
6.ZREM
移除有序集key中的一個或多個成員,不存在的成員將被忽略。
當key存在但不是有序集型別時,返回一個錯誤。
$redis->zrem(‘zset1′,’ef’); //true or false
7.zCard
返回有序集key的基數。
當key存在且是有序集型別時,返回有序集的基數。
當key不存在時,返回0。
$redis->zAdd('key', 0, 'val0');
$redis->zAdd('key', 2, 'val2');
$redis->zAdd('key', 10, 'val10');
$redis->zSize('key'); /* 3 */
8.zSize
返回儲存在key對應的有序集合中的元素的個數。
$redis->zAdd('key', 0, 'val0');
$redis->zAdd('key', 2, 'val2');
$redis->zAdd('key', 10, 'val10');
$redis->zSize('key'); /* 3 */
9.zCount
返回有序集key中,score值在min和max之間(預設包括score值等於min或max)的成員。
關於引數min和max的詳細使用方法,請參考ZRANGEBYSCORE命令。
score值在min和max之間的成員的數量。
$redis->zAdd('key', 0, 'val0');
$redis->zAdd('key', 2, 'val2');
$redis->zAdd('key', 10, 'val10');
$redis->zCount('key', 0, 3); /* 2, corresponding to array('val0', 'val2') */
10.zScore
返回有序集key中,成員member的score值。
如果member元素不是有序集key的成員,或key不存在,返回nil。
$redis->zAdd('key', 2.5, 'val2');
$redis->zScore('key', 'val2'); /* 2.5 */
11.zIncrBy
為有序集key的成員member的score值加上增量increment。
你也可以通過傳遞一個負數值increment,讓score減去相應的值,比如ZINCRBY key -5 member,就是讓member的score值減去5。
當key不存在,或member不是key的成員時,ZINCRBY key increment member等同於ZADD key increment member。
當key不是有序集型別時,返回一個錯誤。
score值可以是整數值或雙精度浮點數。
$redis->zIncrBy('key', 2.5, 'member1');
$redis->zIncrBy('key', 1, 'member1'); /* 3.5 */
12.zRank 從小到大,zRevRank從大到小
返回有序集key中成員member的排名。其中有序整合員按score值遞增(從小到大)順序排列。
排名以0為底,也就是說,score值最小的成員排名為0。
使用ZREVRANK命令可以獲得成員按score值遞減(從大到小)排列的排名。
如果member是有序集key的成員,返回member的排名。
如果member不是有序集key的成員,返回nil。
$redis->zAdd('key', 1, 'one');
$redis->zAdd('key', 2, 'two');
$redis->zRank('key', 'one'); /* 0 */
$redis->zRank('key', 'two'); /* 1 */
$redis->zRevRank('key', 'one'); /* 1 */
$redis->zRevRank('key', 'two'); /* 0 */
13.zRemRangeByRank/zDeleteRangeByRank
移除有序集key中,指定排名(rank)區間內的所有成員。
區間分別以下標引數start和stop指出,包含start和stop在內。
下標引數start和stop都以0為底,也就是說,以0表示有序集第一個成員,以1表示有序集第二個成員,以此類推。
你也可以使用負數下標,以-1表示最後一個成員,-2表示倒數第二個成員,以此類推。
被移除成員的數量。
$redis->zAdd('key', 1, 'one');
$redis->zAdd('key', 2, 'two');y', 3, 'three');
$redis->zRemRangeByRank('key', 0, 1); /* 2 */
$redis->zRange('key', 0, -1, array('withscores' => TRUE)); /* array('three' => 3) */
14.zRemRangeByScore
移除有序集key中,所有score值介於min和max之間(包括等於min或max)的成員。
自版本2.1.6開始,score值等於min或max的成員也可以不包括在內,詳情請參見ZRANGEBYSCORE命令。
被移除成員的數量。
$redis->zAdd('key', 0, 'val0');
$redis->zAdd('key', 2, 'val2');
$redis->zAdd('key', 10, 'val10');
$redis->zRemRangeByScore('key', 0, 3); /* 2 */
15.zUnion
對keys對應的numkeys個有序集合計算合集,並將結果儲存在destination中。在傳遞輸入keys之前必須提供輸入keys的個數和其它可選引數。在預設情況下,元素的結果score是包含該元素的所有有序集合中score的和。如果使用WEIGHTS選項,你可以對每一個有序集合指定一個操作因子。這意味著每一個有序集合中的每個元素的score在傳遞給聚合函式之前均會被乘以該因子。當WEIGHTS沒有指定時,操作因子預設為1。
使用AGGREGATE選項,你可以指定交集中的結果如何被聚合。該選項預設值為SUM,在這種情況下,一個元素的所有score值均會被相加。當選項被設定為MIN或MAX時,結果集合中將會包含一個元素的最大或者最小的score值。如果destination已經存在,那麼它將會被重寫。
$redis->zAdd('k1', 0, 'val0');
$redis->zAdd('k1', 1, 'val1');
$redis->zAdd('k2', 2, 'val2');
$redis->zAdd('k2', 3, 'val3');
$redis->zUnion('ko1', array('k1', 'k2')); /* 4, 'ko1' => array('val0', 'val1', 'val2', 'val3') */
/* Weighted zUnion */
$redis->zUnion('ko2', array('k1', 'k2'), array(1, 1)); /* 4, 'ko1' => array('val0', 'val1', 'val2', 'val3') */
$redis->zUnion('ko3', array('k1', 'k2'), array(5, 1)); /* 4, 'ko1' => array('val0', 'val2', 'val3', 'val1') */
16.zInter
計算給定的一個或多個有序集的交集,其中給定key的數量必須以numkeys引數指定,並將該交集(結果集)儲存到destination。
預設情況下,結果集中某個成員的score值是所有給定集下該成員score值之和。
關於WEIGHTS和AGGREGATE選項的描述,參見ZUNIONSTORE命令。
$redis->zAdd('k1', 0, 'val0');
$redis->zAdd('k1', 1, 'val1');
$redis->zAdd('k1', 3, 'val3');
$redis->zAdd('k2', 2, 'val1');
$redis->zAdd('k2', 3, 'val3');
$redis->zInter('ko1', array('k1', 'k2')); /* 2, 'ko1' => array('val1', 'val3') */
$redis->zInter('ko2', array('k1', 'k2'), array(1, 1)); /* 2, 'ko2' => array('val1', 'val3') */
/* Weighted zInter */
$redis->zInter('ko3', array('k1', 'k2'), array(1, 5), 'min'); /* 2, 'ko3' => array('val1', 'val3') */
$redis->zInter('ko4', array('k1', 'k2'), array(1, 5), 'max'); /* 2, 'ko4' => array('val3', 'val1') */
相關文章
- Redis 有序集合(zset)命令詳解Redis
- zset
- 常用php操作redis命令整理(五)ZSET型別PHPRedis型別
- [Redis]ZSetRedis
- phpredis之zrangeByScorePHPRedis
- phpredis 和 predisPHPRedis
- PHPRedis安裝PHPRedis
- ubuntn 安裝 phpredisPHPRedis
- redis zset 多值排序Redis排序
- php中如何使用phpredisPHPRedis
- ****phpredis的使用方法PHPRedis
- Redis的ZSet底層資料結構,ZSet型別全面解析Redis資料結構型別
- Redis物件——有序集合(ZSet)Redis物件
- centos 安裝phpredis擴充CentOSPHPRedis
- Redis 中ZSET資料型別命令使用及對應場景總結Redis資料型別
- Mac 編譯安裝 PHPRedis 模組Mac編譯PHPRedis
- windwos平臺安裝phpredis模組PHPRedis
- php操作redis,有序集合zsetPHPRedis
- PHP 操作 Redis 之 phpredis 擴充套件PHPRedis套件
- Linux整合phpredis詳細筆記LinuxPHPRedis筆記
- go操作redis的有序集合(zset)GoRedis
- Redis之zset型別及操作Redis型別
- php7.2 安裝phpredis擴充套件PHPRedis套件
- Redis基本資料結構之ZSetRedis資料結構
- redis-zset結構-業務實戰Redis
- Redis 資料庫之有序集合(zset)Redis資料庫
- Laravel 6.0 的 predis 和 phpredis 衝突的原因LaravelRedisPHP
- phpRedis函式使用總結【分類詳細】PHPRedis函式
- linux下安裝redis以及phpRedis擴充套件LinuxRedisPHP套件
- Redis資料結構詳解之Zset(五)Redis資料結構
- NOClassDefFoundError org.springframework.data.redis.connection.zset.tupleErrorSpringFrameworkRedis
- 演算法~利用zset實現滑動視窗限流演算法
- Python&Redis 無序集合set、有序集合zset操作PythonRedis
- Redis五大資料型別之 Zset(有序集合)Redis大資料資料型別
- phpredis 3.1.6 擴充套件,出現指定 database 無效的情況。PHPRedis套件Database
- phpredis和predis 如何解決 返回型別不一致PHPRedis型別
- 【redis學習二】多php版本下phpredis擴充套件安裝RedisPHP套件
- redis之有序集合型別(Zset)——排行榜的實現Redis型別