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 |
ZUNIONSTORE 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
有罪是符合人性的,但长期坚持不改就是魔鬼。