Redis五种类型及应用场景

417 阅读2分钟

参考资料:redis终章

redis有五种基本数据类型,分别是String、List、Hash、Set、Sorted Set,接下来会逐个介绍每种类型及其应用场景。

String

String是最简单也是最常用的数据类型,通过setget方法设置或获取数据,有如下使用场景

  • **缓存功能:**最常用的功能,没有之一。比如,对某个用户对象转成JSON字符串,读取后再转换回目标对象;
  • **计数器:**常用于限制某个接口的请求次数,或者统计用户的点击次数等等,使用incr命令实现自增。实现计数器

Hash

这是类似Map的一种结构,通过hsethget方法设置或获取数据。暂时在项目中没有应用到这种结构。

image-20201111150410410

List

List是简单的字符串列表,按照插入顺序排序,列表的头部是左边,尾部是右边。头尾都可以添加或移除元素。常用命令

image-20201111152636983

应用场景:

  • 消息队列:可以使用左进右出,或者右进左出,生产者在一端压入数据,消费者从另一端弹出数据。redis实现消息队列

    注意:这种消息队列需要消费者不断轮询,同时可以使用blpop或者brpop,这两个指令在列表没有元素时,会一直阻塞。

Set

Set是无序集合,会自动去重。常用命令

这种数据类型主要特点时能够去重,在分布式环境下,可以使用redisset实现全局数据去重。

Sorted Set

Sorted set既可以去重,又可以排序。与set相比,写入value时,还需要设置score,redis会自动根据分数从小到达排序。常用命令

应用场景:

  • **延时队列:**把任务执行时间戳作为score,应用程序不断轮询redis,获取分数最小的元素,比较score和当前时间戳。

  • **排行榜:**比如歌曲榜单、游戏排行榜。多维度排序

    多数场景下,我们需要多维度的排序,比如:软件下载榜单,先按照下载量排序,如果下载量相同,再按照最新下载时间排序.

    针对这种两维度排序,由于score是浮点型,我们可以构建一个特殊的分数,整数部分为下载量,小数部分是下载时间,这样就实现两个维度排序。

    但是,如果是三个维度、四个维度呢??

    自定义权重公式,比如score=下载量*10000 + 下载时间