第 5 章 有序集合
Redis 的有序集合(sorted set)同时具有 “有序” 和 “集合” 两种性质,这种数据结构中的每个元素都由一个成员和一个与成员相关联的分值组成,其中成员以字符串方式存储,而分值则以 64 位双精度浮点数格式存储。
作为例子,图6-1 展示了一个记录薪水数据的有序集合,而图6-2 则展示了一个记录水果价格的有序集合。

Figure 1. 图6-1 记录薪水数据的有序集合

Figure 2. 图6-2 记录水果价格的有序集合
与集合一样,有序集合中的每个成员都是独一无二的,同一个有序集合中不会出现重复的成员。与此同时,有序集合的成员将按照它们各自的分值大小进行排序:比如,分值为 3.14 的成员将小于分值为 10.24 的成员,而分值为 999 的成员也会小于分值为 10086 的成员。有序集合的分值除了可以是数字之外,还可以是字符串 "+inf" 或者 "-inf",这两个特殊值分别用于表示无穷大和无穷小。
需要注意的是,虽然同一个有序集合不能存储相同的成员,但不同成员的分值却可以是相同的。当两个或多个成员拥有相同的分值时,Redis 将按照这些成员在字典序中的大小对其进行排列:举个例子,如果成员 "apple" 和成员 "zero" 都拥有相同的分值 100,那么 Redis 将认为成员 "apple" 小于成员 "zero",这是因为在字典序中,字母 "a" 开头的单词要小于字母 "z" 开头的单词。
有序集合是 Redis 提供的所有数据结构中最为灵活的一种,它可以以多种不同的方式获取数据,比如根据成员获取分值、根据分值获取成员、根据成员的排名获取成员、根据指定的分值范围获取多个成员等。
本章接下来将对有序集合的各个命令进行介绍,并展示如何使用这些命令实现排行榜、时间线、商品推荐和自动补全等功能。