zoukankan      html  css  js  c++  java
  • redis排序

    参考:http://www.cnblogs.com/redcreen/archive/2011/02/15/1955226.html

    redis支持对list,set和sorted set元素的排序。排序命令是sort 完整的命令格式如
    下:
    SORT key [BY pattern] [LIMIT start count] [GET pattern] [ASC|DESC] [ALPHA] [STORE dstkey]
    下面我们一一说明各种命令选项
    (1)sort key
    这个是最简单的情况,没有任何选项就是简单的对集合自身元素排序并返回排序结果.下面给个例子

    redis 127.0.0.1:6379> lpush m1 12 11 23 13
    (integer) 4
    redis 127.0.0.1:6379> sort m1
    1) "11"
    2) "12"
    3) "13"
    4) "23"

    (2)[ASC|DESC] [ALPHA]
    sort默认的排序方式(asc)是从小到大排的,当然也可以按照逆序或者按字符顺序排。逆序可以加上desc选项,想按
    字母顺序排可以加alpha选项,当然alpha可以和desc一起用。下面是个按字母顺序排的例子

    redis 127.0.0.1:6379> lpush mylist baidu hello xhan soo
    (integer) 4
    redis 127.0.0.1:6379> sort mylist
    (error) ERR One or more scores can't be converted into double
    redis 127.0.0.1:6379> sort mylist alpha
    1) "baidu"
    2) "hello"
    3) "soo"
    4) "xhan"
    redis 127.0.0.1:6379> sort mylist alpha desc
    1) "xhan"
    2) "soo"
    3) "hello"
    4) "baidu"

    (3)[BY pattern]
    除了可以按集合元素自身值排序外,还可以将集合元素内容按照给定pattern组合成新的key,并按照新key中对应
    的内容进行排序。下面的例子接着使用第一个例子中的ml集合做演示:
    redis 127.0.0.1:6379> set name11 nihao
    OK
    redis 127.0.0.1:6379> set name12 wo
    OK
    redis 127.0.0.1:6379> set name13 shi
    OK
    redis 127.0.0.1:6379> set name23 lala
    OK
    redis 127.0.0.1:6379> sort m1 by name*
    (error) ERR One or more scores can't be converted into double
    redis 127.0.0.1:6379> sort m1 by name* alpha
    1) "23"
    2) "11"
    3) "13"
    4) "12"

    (4)[GET pattern]
    上面的例子都是返回的ml集合中的元素。我们也可以通过get选项去获取指定pattern作为新key对应的值。看个组合起
    来的例子
    redis 127.0.0.1:6379> sort m1 by name* get name* alpha
    1) "lala"
    2) "nihao"
    3) "shi"
    4) "wo"
    这 次返回的就不在是ml中的元素了,而是name12 name13 name23 name23对应的值。当然排序是按照name12 name13
    name23 name23值并根据字母顺序排的。另外get选项可以有多个。看例子(#特殊符号引用的是原始集合也就是ml)
    redis 127.0.0.1:6379> sort m1 by name* get name* get # alpha
    1) "lala"
    2) "23"
    3) "nihao"
    4) "11"
    5) "shi"
    6) "13"
    7) "wo"
    8) "12"
    最后在还有一个引用hash类型字段的特殊字符->,下面是例子
    redis 127.0.0.1:6379> hset user1 name hanjie
    (integer) 0
    redis 127.0.0.1:6379> hset user11 name hanjie
    (integer) 0
    redis 127.0.0.1:6379> hset user12 name 86
    (integer) 0
    redis 127.0.0.1:6379> hset user13 name lxl
    (integer) 0
    redis 127.0.0.1:6379> sort m1 get user*->name
    1) "hanjie"
    2) "86"
    3) "lxl"
    4) (nil)
    很容易理解,注意当对应的user23不存在时候返回的是nil


    (5) [LIMIT start count]

    上面例子返回结果都是全部。limit选项可以限定返回结果的数量。例子
    redis 127.0.0.1:6379> sort m1 get name* limit 1 2
    1) "wo"
    2) "shi"
    start下标是从0开始的,这里的limit选项意思是从第二个元素开始获取2个

    (6)[STORE dstkey]
    如果对集合经常按照固定的模式去排序,那么把排序结果缓存起来会减少不少cpu开销.使用store选项可以将排序内容
    保存到指定key中。保存的类型是list
    redis 127.0.0.1:6379> sort m1 get name* limit 1 2 store c1
    (integer) 2
    redis 127.0.0.1:6379> lrange c1 0 -1
    1) "wo"
    2) "shi"
    这个例子我们将排序结果保存到了cl中

  • 相关阅读:
    log4j2配置详解
    【数据库性能相关知识汇总】
    【Java并发知识点汇总】
    Spring实践系列-入门篇(一)
    分布式实践之概念解析
    平时工作需要注意总结面试中必然会问到的问题
    DataX支持mysql8.X
    springboot集成shiro
    ELK 6.2.4搭建
    DataX-MysqlWriter 插件文档
  • 原文地址:https://www.cnblogs.com/zhengwk/p/5872530.html
Copyright © 2011-2022 走看看