经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Redis » 查看文章
Redis基本操作进阶篇学习--排序
来源:cnblogs  作者:kangyz  时间:2021/12/31 8:52:35  对本文有异议

有序集合

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

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

  1. zadd name 2 kang
  2. zadd name 1 li
  3. zadd name 3 wang
  4. zadd name 1 zhao
  5. zrange name 0 -1
  6. # 返回值:
  7. # 1) "li"
  8. # 2) "zhao"
  9. # 3) "kang"
  10. # 4) "wang"

SORT命令

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

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

常用参数介绍

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

针对数字元素进行排序

  1. # 对集合进行排序操作
  2. sadd temperature 0 18 16 -1 5 -6
  3. sort temperature
  4. # 正序排序返回值:
  5. # 1) "-6"
  6. # 2) "-1"
  7. # 3) "0"
  8. # 4) "5"
  9. # 5) "16"
  10. # 6) "18"
  11. sort temperature desc
  12. # 倒序排序返回值:
  13. # 1) "18"
  14. # 2) "16"
  15. # 3) "5"
  16. # 4) "0"
  17. # 5) "-1"
  18. # 6) "-6"
  19. # 对列表进行排序
  20. lpush age 23 18 16 22 26 28 42
  21. lrange age 0 -1
  22. # 返回值:
  23. # 1) "42"
  24. # 2) "28"
  25. # 3) "26"
  26. # 4) "22"
  27. # 5) "16"
  28. # 6) "18"
  29. # 7) "23"
  30. sort age
  31. # 正序排序返回值:
  32. # 1) "16"
  33. # 2) "18"
  34. # 3) "22"
  35. # 4) "23"
  36. # 5) "26"
  37. # 6) "28"
  38. # 7) "42"
  39. sort age desc
  40. # 倒序排序返回值:
  41. # 1) "42"
  42. # 2) "28"
  43. # 3) "26"
  44. # 4) "23"
  45. # 5) "22"
  46. # 6) "18"
  47. # 7) "16"
  48. # 对有序集合进行排序
  49. zadd score 1 20 2 40 3 10 4 88
  50. zrange scroe 0 -1
  51. # 返回值:
  52. # 1) "20"
  53. # 2) "40"
  54. # 3) "10"
  55. # 4) "88"
  56. sort score
  57. # 正序排序返回值:
  58. # 1) "10"
  59. # 2) "20"
  60. # 3) "40"
  61. # 4) "88"
  62. sort score desc
  63. # 倒序排序返回值:
  64. # 1) "88"
  65. # 2) "40"
  66. # 3) "20"
  67. # 4) "10"

针对非数字元素排序

  1. lpush name zhao qian sun li
  2. sort name
  3. # 返回值:
  4. # (error) ERR One or more scores can't be converted into double
  5. sort name alpha
  6. # 正序排序返回值
  7. # 1) "li"
  8. # 2) "qian"
  9. # 3) "sun"
  10. # 4) "zhao"
  11. sort name alpha desc
  12. # 倒序排序返回值:
  13. # 1) "zhao"
  14. # 2) "sun"
  15. # 3) "qian"
  16. # 4) "li"

按范围获取排序结果

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

基于参考键进行排序

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

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

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

  1. lpush stuno 001 002 003
  2. mset name_001 kang age_001 18
  3. mset name_002 zhao age_001 23
  4. mset name_003 liu age_001 16
  5. sort stuno by age_*
  6. # 返回值:
  7. # 1) "002"
  8. # 2) "003"
  9. # 3) "001"
  10. lpush stuno 001 002 003
  11. MSET name kang age 18
  12. sort stuno by age
  13. # 返回值:
  14. # 1) "003"
  15. # 2) "002"
  16. # 3) "001"

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

保存排序结果

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

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

注意事项

  1. 尽可能减少待排序键中元素的个数
  2. 多使用LIMIT参数获取数据
  3. 如果排序数据量过大,尽可能使用STORE参数缓存结果

原文链接:http://www.cnblogs.com/kangyz/p/15741445.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号