锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

PHP简单操作Redis常用方法以及注意事项(三)---SortedSet有序集合

时间:2023-07-15 03:37:00 zra250三极管

写在前面 :

这东西比较烦,刚开始接触的时候一脸懵逼,放下心来仔细检查,

一点一点敲代码试验会发现有序集合就是排序时分几种情况!

与集合一样,有序集合不允许成员重复,但会给每个成员一个浮点分数,redis正是通过这个分数来排序的。

如图所示,有三种排序方法:

(通过分数排序) 是自己设定的分数

zRangeByScore(正序0-999)

zRevRangeByScore(倒序999-0)

(通过索引排序) 通过分数排序 按照0-9999索引

zRange(正序0-999)

zRevRange(倒序999-0)

(通过字典排序) 通过字典 a-z 这样的顺序排序

zRangeByLex(正序a-z)

zRevRangeByLex(倒序z-a)

篇幅有限 请移动详细介绍 这里

1,PHP 操作Redis-ScoreSet有序集合

$redis->zAdd('SSet1', 0, 'value11');//value1插入集合中 定义分数为0 $redis->zAdd('SSet1', 1, 'value11');//value1插入集合(更新分数为1)  $redis->zAdd('SSet1', 3, 'value13'); $redis->zAdd('SSet1', 4, 'value14'); $redis->zAdd('SSet1', 5, 'value15'); $redis->zAdd('SSet1', 6, 'value16'); $redis->zIncrBy('SSet1',1.2, 'value16)   $redis->zAdd('SSet2', 0, 'avalue21'); $redis->zAdd('SSet2', 1, 'bvalue22'); $redis->zAdd('SSet2', 3, 'cvalue23'); $redis->zAdd('SSet2', 4, 'dvalue24'); $redis->zAdd('SSet2', 5, 'dvalue25'); $redis->zAdd('SSet2', 6, 'evalue26');   $redis->zAdd('SSet3', 0, 'avalue31'); $redis->zAdd('SSet3', 0, 'bvalue32'); $redis->zAdd('SSet3', 0, 'cvalue33'); $redis->zAdd('SSet3', 0, 'dvalue34'); $redis->zAdd('SSet3', 0, 'dvalue35'); $redis->zAdd('SSet3', 0, 'evalue36');   $SSet1Sort = $redis->zScore('SSet1', 'value//取value对应的分数 $SSet1Sort = $redis->zRank('SSet1', 'value//取value对应的索引 $SSet1Cnt = $redis->zCard('SSet1);//集合内成员数  $SSet2LexCnt = $redis->zLexCount('SSet2', '[a', '(e);//字典排序 区间成员数 $SSet2LexVlaueZ    = $redis->zRangeByLex('SSet2', '[a', '(e);//字典排序 区间成员 $SSet2LexVlaueF    = $redis->zRevRangeByLex('SSet2', '[e', '(a);//字典排序 区间成员 //$redis->zRemRangeByLex('SSet2', '[a', '(e);//字典排序 删除区间成员  $SSet2KeyVlaueZ    = $redis->zRange('SSet2', 0, 3)///索引排序 区间成员 $SSet2KeyVlaueF    = $redis->zRevRange('SSet2', 0, 3)//索引倒序排序 区间成员 //$redis->zRemRangeByRank('SSet2', 0, 5);//索引排序 删除区间成员  $SSet2ScoreCnt = $redis->zCount('SSet2', 0, 5);//分数排序 区间成员数 $SSet2ScoreVlaueZ    = $redis->zRangeByScore('SSet2', 0, 5);//分数排序 区间成员 $SSet2ScoreVlaueF    = $redis->zRevRangeByScore('SSet2', 5, 0);//分数排序 区间成员 //$redis->zRemRangeByScore('SSet2', 0, 5);//分数排序 删除区间成员  $redis->zInterStore('SSet5',['SSet1','SSet2');//多个有序集合交集生成新的有序集合 $redis->zUnionStore('SSet6',['SSet1','SSet2');//多个有序集合并生成新的有序集合  //$redis->zRem('SSet3', 'avalue31) //$redis->zRem('SSet3', 'avalue31', 'bvalue32);//删除多个成员  print $SSet1Sort . "\r\n"; print $SSet1Cnt . "\r\n";  print $SSet2LexCnt . "\r\n"; print_r($SSet2LexVlaueZ); print_r($SSet2LexVlaueF);  print_r($SSet2KeyVlaueZ); print_r($SSet2KeyVlaueF);  print $SSet2ScoreCnt . "\r\n"; print_r($SSet2ScoreVlaueZ); print_r($SSet2ScoreVlaueF);  print_r($redis->zRange('SSet5', 0, -1)); print_r($redis->zRange('SSet6', 0, -1));

运行结果:

D:\workproject\www_laravel\laravel6_test>php test.php 0 5 5 Array (     [0] => avalue21     [1] => bvalue22     [2] => cvalue23     [3] => dvalue24     [4] => dvalue25 ) Array (     [0] => dvalue25     [1] => dvalue24     [2] => cvalue23     [3] => bvalue22     [4] => avalue21 ) Array (     [0] => avalue21     [1] => bvalue22     [2] => cvalue23     [3] => dvalue24 ) Array (     [0] => evalue26     [1] => dvalue25     [2] => dvalue24     [3] => cvalue23 ) 5 Array (     [0] => avalue21     [1] => bvalue22     [2] => cvalue23     [3] => dvalue24     [4] => dvalue25 ) Array (     [0] => dvalue25     [1] => dvalue24     [2] => cvalue23     [3] => bvalue22     [4] => avalue21 ) Array ( ) Array (     [0] => avalue21     [1] => bvalue22     [2] => value11     [3] => cvalue23     [4] => value13     [5] => dvalue24     [6] => value14     [7] => dvalue25     [8] => value15     [9] => evalue26     [10] => value16 )

ScortSer总结一下:

关于写入:

zAdd(k,s,v)

注:成员v是唯一的 如果重复zAdd覆盖分数

关于取出:

zScore(k,v)取成员分数

zRank(k,v)取成员索引

zCard(k)收藏中有多少成员?

排序取值知识点太多 这里记录

关于操作:

zInterStore(k,[k1,k2]);//多个集合差集生成新的k集合
zUnionStore(k,[k2,k1]);//多个集合并集生成新的k集合

关于删除:

zRem(k,v)//把v从k中删除

zRem(k,v1,v2)//把v1,v2从k中删除

zRemRangeByScore(k,start,end)//按照分数删除

zRemRangeByRank(k,start,end)//按索引数删除

zRemRangeByLex(k,start,end)//按照字典删除

关于排序问题 在这里

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章