美文网首页
Redis排序

Redis排序

作者: 守住阳光 | 来源:发表于2018-06-06 16:58 被阅读0次

一、有序集合的集合操作

        集合类型提供了强大的集合操作命令,但是如果需要排序就需要用到有序集合类型。Redis的作者在设计redis的命令时考虑到了不同数据类型的使用场景,对于不常用到或者在不损失过多性能的前提下可以使用现有命令来实现的功能,redis就不会提供单独的命令来实现。这一原则使得redis在拥有强大功能的同时保持着相对简洁的命令。

        有序集合常见的使用场景是大数据排序,如游戏的玩家排行榜,所以很少会需要获得键中的全部数据。同样redis认为开发者在做完交集、并集运算后不需要直接获得全部结果,而是会希望将结果存入新的键中以便后续处理。这就解释了为什么有序集合只有ZINTERSTORE和    ZUNIONSTORE命令而没有ZINTER和ZUNION命令。

二、SORT命令

        SORT命令可以对列表类型,集合类型和有序集合类型键进行排序,并且可以完成与关系数据库的连接查询相类似的工作。对有序集合类型进行排序时,会忽略元素分数,只针对元素自身的值进行排序。如下代码:

        除了排列数字外,SORT命令还可以通过ALPHA参数实现按字典排序非数字元素。SORT命令还支持LIMIT参数来返回指定范围的结果。命令为:LIMIT offset count 。

三、BY参数

         BY参数的语法为BY 参考键。其中参考键可以是字符串类型键或者是散列类型键的某个字段(表示为键名->字段名)。如果提供了BY参数,SORT命令将不再依据元素自身的值进行排序,而是对每个元素使用元素的值替换参考键中的第一个“*”并获取其值,然后依据该值对元素排序。如:SORT tag:ruby:posts by post:*->time desc。

         当参考键名不包含“*”时(即常量键名,与元素值无关),SORT命令将不执行排序,因为redis认为这种情况时没有意义的(因为所要比较的值都一样)。

         如果几个元素的参考键值相同,则SORT命令会再比较元素本身的值来决定元素的顺序。

         当某个元素的参考键不存在时,会默认参考键的值为0。

四、GET参数

        GET参数不影响排序,它的作用是使SORT命令的返回结果不再是元素自身的值,而是GET参数指定的键值。GET参数和BY参数一样,GET参数也支持字符串类型和散列类型的键,并使用“*”作为占位符。如下命令会实现按时间排序后返回文章的标题:

        SORT tag:ruby:posts by post:*->time desc GET post:*->title

        在一个GET参数中可以有多个GET参数(而BY参数只能有一个),如:

        SORT tag:ruby:posts by post:*->time desc GET post:*->title GET post:*->time

        GET #会返回元素本身的值,如:

        SORT tag:ruby:posts by post:*->time desc GET post:*->title GET post:*->time GET # 

五、STORE参数

        如果希望保存排序结果,可以使用STORE参数,如:

        SORT tag:ruby:posts by post:*->time desc GET post:*->title GET post:*->time GET #  STORE store.result 

        保存后的键的类型为列表类型,如果键已经存在则会覆盖它。加上STORE参数后命令的返回值为结果的个数。

六、性能优化

       SORT命令是redis中最强大最复杂的命令之一,如果使用不好很容易成为性能的瓶颈。在开发中使用SORT时需要注意以下几点:

        1、尽可能减少待排序键中元素的数量;

        2、使用LIMIT参数只获取需要的数据;

        3、如果要排序的数据数量较大,尽可能使用store参数将结果缓存。

相关文章

  • Redis 排序命令详解

    Redis支持对List,Set,Sorted Set类型进行排序 Redis最简单的排序方式:sort key ...

  • redis高级应用

    摘自http://xiaoh.me/2016/06/30/redis-advanced/ 排序 redis支持对l...

  • Redis排序

    一、有序集合的集合操作 集合类型提供了强大的集合操作命令,但是如果需要排序就需要用到有序集合类型。Redis...

  • redis 排序

    SORT命令通过将被排序键包含的元素载入到数组里面,然后对数据进行排序来完成对键进行排序的工作。在默认情况下,SO...

  • Redis - 排序

    Redis - 排序 SORT命令通过将被排序键包含的元素载入到数组里,然后对数组进行排序来完成对键进行排序的工作...

  • Redis 排序的使用

    Redis 排序的格式如下: SORT key [BY pattern] [LIMIT offset count]...

  • Redis高级特性——排序

    排序 对于排序的场景,在业务中会大量使用到,对于Redis,如果使用了有序集合,那么排序问题很容易解决,并且得分可...

  • Redis sort 排序

    SORT key [BY pattern] [LIMIT offset count] [GET pattern [...

  • redis其他命令

    1.redis排序 2.redis 事务 redis事务是可以让一个客户端在不被其他客户端打断的情况下执行多个命令...

  • 深入Redis的List类型的应用

    Redis的List Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或...

网友评论

      本文标题:Redis排序

      本文链接:https://www.haomeiwen.com/subject/jygbsftx.html