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