redis数据类型应用场景

Redis的业务应⽤范围⾮常⼴泛,以技术社区的帖⼦模块为实例,梳理⼀下,Redis 可以⽤在哪些地⽅?
  1. 记录帖子的点赞数、评论数和点击数 (hash)。
  1. 记录用户的帖子 ID 列表 (排序),便于快速显示用户的帖子列表 (zset)。
  1. 记录帖子的标题、摘要、作者和封面信息,用于列表页展示 (hash)。
  1. 记录帖子的点赞用户 ID 列表,评论 ID 列表,用于显示和去重计数 (zset)。
  1. 缓存近期热帖内容 (帖子内容空间占用比较大),减少数据库压力 (hash)。
  1. 记录帖子的相关文章 ID,根据内容推荐相关帖子 (list)。
  1. 如果帖子 ID 是整数自增的,可以使用 Redis 来分配帖子 ID(计数器)。
  1. 收藏集和帖子之间的关系 (zset)。
  1. 记录热榜帖子 ID 列表,总热榜和分类热榜 (zset)。
  1. 缓存用户行为历史,进行恶意行为过滤 (zset,hash)。
当然,实际情况下需求可能也没这么多,因为在请求压力不大的情况下,很多数据都是可以直接从数据库中查询的。但请求压力一大,以前通过数据库直接存取的数据则必须要挪到缓存里来。
 

String类型的适用场景

String类型的适用场景

不同统计场景下,数据类型的选择

不同统计场景下,数据类型的选择
 
Redis也可以使用List数据类型当做队列使用,一个客户端使用rpush生产数据到Redis中,另一个客户端使用lpop取出数据进行消费,非常方便。但要注意的是,使用List当做队列,缺点是没有ack机制和不支持多个消费者。没有ack机制会导致从Redis中取出的数据后,如果客户端处理失败了,取出的这个数据相当于丢失了,无法重新消费。所以使用List用作队列适合于对于丢失数据不敏感的业务场景,但它的优点是,因为都是内存操作,所以非常快和轻量。
而Redis提供的PubSub,可以支持多个消费者进行消费,生产者发布一条消息,多个消费者同时订阅消费。但是它的缺点是,如果任意一个消费者挂了,等恢复过来后,在这期间的生产者的数据就丢失了。PubSub只把数据发给在线的消费者,消费者一旦下线,就会丢弃数据。另一个缺点是,PubSub中的数据不支持数据持久化,当Redis宕机恢复后,其他类型的数据都可以从RDB和AOF中恢复回来,但PubSub不行,它就是简单的基于内存的多播机制。
之后Redis 5.0推出了Stream数据结构,它借鉴了Kafka的设计思想,弥补了List和PubSub的不足。Stream类型数据可以持久化、支持ack机制、支持多个消费者、支持回溯消费,基本上实现了队列中间件大部分功能,比List和PubSub更可靠。
另一个经常使用的是基于Redis实现的布隆过滤器,其底层实现利用的是String数据结构和位运算,可以解决业务层缓存穿透的问题,而且内存占用非常小,操作非常高效。

如何在Redis中保存时间序列数据?

在Redis中保存时间序列数据
 

消息队列

redis作为消息队列