参考资料:redis终章
redis有五种基本数据类型,分别是String、List、Hash、Set、Sorted Set,接下来会逐个介绍每种类型及其应用场景。
String
String
是最简单也是最常用的数据类型,通过set
和get
方法设置或获取数据,有如下使用场景
- **缓存功能:**最常用的功能,没有之一。比如,对某个用户对象转成
JSON
字符串,读取后再转换回目标对象; - **计数器:**常用于限制某个接口的请求次数,或者统计用户的点击次数等等,使用
incr
命令实现自增。实现计数器
Hash
这是类似Map
的一种结构,通过hset
和hget
方法设置或获取数据。暂时在项目中没有应用到这种结构。
List
List
是简单的字符串列表,按照插入顺序排序,列表的头部是左边,尾部是右边。头尾都可以添加或移除元素。常用命令
应用场景:
-
消息队列:可以使用左进右出,或者右进左出,生产者在一端压入数据,消费者从另一端弹出数据。redis实现消息队列
注意:这种消息队列需要消费者不断轮询,同时可以使用
blpop
或者brpop
,这两个指令在列表没有元素时,会一直阻塞。
Set
Set
是无序集合,会自动去重。常用命令
这种数据类型主要特点时能够去重,在分布式环境下,可以使用redis
的set
实现全局数据去重。
Sorted Set
Sorted set
既可以去重,又可以排序。与set
相比,写入value时,还需要设置score
,redis会自动根据分数从小到达排序。常用命令
应用场景:
-
**延时队列:**把任务执行时间戳作为score,应用程序不断轮询redis,获取分数最小的元素,比较score和当前时间戳。
-
**排行榜:**比如歌曲榜单、游戏排行榜。多维度排序
多数场景下,我们需要多维度的排序,比如:软件下载榜单,先按照下载量排序,如果下载量相同,再按照最新下载时间排序.
针对这种两维度排序,由于score是浮点型,我们可以构建一个特殊的分数,整数部分为下载量,小数部分是下载时间,这样就实现两个维度排序。
但是,如果是三个维度、四个维度呢??
自定义权重公式,比如
score=下载量*10000 + 下载时间