Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1879406
  • 博文数量: 184
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2388
  • 用 户 组: 普通用户
  • 注册时间: 2016-12-21 22:26
个人简介

90后空巢老码农

文章分类

全部博文(184)

文章存档

2021年(26)

2020年(56)

2019年(54)

2018年(47)

2017年(1)

我的朋友

分类: NOSQL

2019-11-03 23:01:58

redis的SORT命令可以对列表键,集合键或者有序集合键的值进行排序,其底层实现如下:
SORT numbers
1. 创建一个和参数列表等长的数组,该数组的每一项都是redisSortObject结构

点击(此处)折叠或打开

  1. typedef struct _redisSortObject {
  2.     robj *obj;
  3.     union {
  4.         double score;// 排序数字值时使用
  5.         robj *cmpobj;// 排序带有by选项的字符串值时使用
  6.     } u;
  7. } redisSortObject;
2. 遍历数组,将各个数组的obj指针分别指向numbers列表的各个项,构成obj指针和列表项之间的一对一关系
3. 遍历数组,将各个obj指针所指向的列表项转换成一个double类型的浮点数,并将这个浮点数保存在相应数组项的u.score里面
4. 根据数组项u.score属性的值,对数组进行数字值排序,排序后的数组项按照u.score属性从小到大排列
5. 遍历数组,将各个数组想的obj指针所指向的列表项作为排序结果返回给客户端
其中各种命令的选项,均在score和cmpobj上面做文章,obj始终指向要被排序的对象
其选项的执行顺序为(选项的输入先后顺序不影响执行顺序):
1. 排序:ALPHA, ASC, DESC, BY
2. 限制排序结果集的长度
2. 获取外部键
4. 保存排序结果集STORE
5. 向客户端返回排序结果
阅读(1155) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~