zoukankan      html  css  js  c++  java
  • Redis基本操作进阶篇学习排序

    有序集合

    Redis有序集合中每个元素都会关联一个double类型的分数。Redis通过分数来为集合中的成员进行从小到大的排序。

    有序集合中的成员是唯一的,但分数(score)可以重复。

    zadd name 2 kang
    
    zadd name 1 li
    
    zadd name 3 wang
    
    zadd name 1 zhao
    
    zrange name 0 -1
    # 返回值:
    # 1) "li"
    # 2) "zhao"
    # 3) "kang"
    # 4) "wang"
    

    SORT命令

    Redis中SORT命令可以对列表类型、集合类型以及有序集合类型键进行排序,并返回显示排序的结果,但是不会对原有数据进行修改。

    在对有序集合烈性排序时回忽略元素的分数,只针对元素自身的值进行排序。

    常用参数介绍

    参数 描述
    DESC 使目标倒序排列
    ALPHA 针对非数字元素排序
    LIMIT 参数可以指定返回值范围
    即跳过offset个元素并取之后的count个元素
    BY 基于参考键进行排序
    STORE 保存排序结果

    针对数字元素进行排序

    # 对集合进行排序操作
    sadd temperature 0 18 16 -1 5 -6
    
    sort temperature
    # 正序排序返回值:
    # 1) "-6"
    # 2) "-1"
    # 3) "0"
    # 4) "5"
    # 5) "16"
    # 6) "18"
    
    sort temperature desc
    # 倒序排序返回值:
    # 1) "18"
    # 2) "16"
    # 3) "5"
    # 4) "0"
    # 5) "-1"
    # 6) "-6"
    
    # 对列表进行排序
    lpush age 23 18 16 22 26 28 42
    
    lrange age 0 -1
    # 返回值:
    # 1) "42"
    # 2) "28"
    # 3) "26"
    # 4) "22"
    # 5) "16"
    # 6) "18"
    # 7) "23"
    
    sort age
    # 正序排序返回值:
    # 1) "16"
    # 2) "18"
    # 3) "22"
    # 4) "23"
    # 5) "26"
    # 6) "28"
    # 7) "42"
    
    sort age desc
    # 倒序排序返回值:
    # 1) "42"
    # 2) "28"
    # 3) "26"
    # 4) "23"
    # 5) "22"
    # 6) "18"
    # 7) "16"
    
    
    # 对有序集合进行排序
    zadd score 1 20 2 40 3 10 4 88
    
    zrange scroe 0 -1
    # 返回值:
    # 1) "20"
    # 2) "40"
    # 3) "10"
    # 4) "88"
    
    sort score
    # 正序排序返回值:
    # 1) "10"
    # 2) "20"
    # 3) "40"
    # 4) "88"
    
    sort score desc
    # 倒序排序返回值:
    # 1) "88"
    # 2) "40"
    # 3) "20"
    # 4) "10"
    

    针对非数字元素排序

    lpush name zhao qian sun li
    
    sort name
    # 返回值:
    # (error) ERR One or more scores can't be converted into double
    
    sort name alpha
    # 正序排序返回值
    # 1) "li"
    # 2) "qian"
    # 3) "sun"
    # 4) "zhao"
    
    sort name alpha desc
    # 倒序排序返回值:
    # 1) "zhao"
    # 2) "sun"
    # 3) "qian"
    # 4) "li"
    
    

    按范围获取排序结果

    lpush age 18 20 22 16 14 23
    
    sort age limit 2 -1
    # 返回值:
    # 1) "18"
    # 2) "20"
    # 3) "22"
    # 4) "23"
    

    基于参考键进行排序

    BY参数的语法为BY 参考键,其中参考键可以是字符串类型键或散列类型键的某个字段。

    如果使用了BY属性,SORT命令将根据对应参考键的值进行排序。

    当键名为常量时,SORT命令将不会执行排序操作。

    lpush stuno 001 002 003
    
    mset name_001 kang age_001 18
    
    mset name_002 zhao age_001 23
    
    mset name_003 liu age_001 16
    
    sort stuno by age_*
    # 返回值:
    # 1) "002"
    # 2) "003"
    # 3) "001"
    
    lpush stuno 001 002 003
    
    MSET name kang age 18
    
    sort stuno by age
    # 返回值:
    # 1) "003"
    # 2) "002"
    # 3) "001"
    

    当参考键名中不包含“*”时(即键名为常量),SORT命令将不执行排序操作。

    保存排序结果

    STORE参数可以保存SORT排序结果,保存后的键的类型为列表类型,如果键已经存在,则会覆盖。

    lpush age 18 23 16 24
    
    sort age store result
    
    lrange result 0 -1
    # 返回值:
    # 1) "16"
    # 2) "18"
    # 3) "23"
    # 4) "24"
    

    注意事项

    1. 尽可能减少待排序键中元素的个数
    2. 多使用LIMIT参数获取数据
    3. 如果排序数据量过大,尽可能使用STORE参数缓存结果
  • 相关阅读:
    你是怎么把字符串“2016-11-16” 变为 “16/11/2016” 的?
    js-------》(小效果)实现倒计时及时间对象
    Ruby方法
    JAVASCRIPT事件详解-------原生事件基础....
    html5的小知识点小集合
    原生js实现的效果
    IDEA 实用功能Auto Import:自动优化导包(自动删除、导入包)
    8.SpringBoot 模板引擎 Thymeleaf
    7.SpringBoot 之 Web
    6.日志的使用
  • 原文地址:https://www.cnblogs.com/kangyz/p/15741445.html
Copyright © 2011-2022 走看看