当前位置:首页 > 问答 > 正文

Redis开源队列方案火起来了,未来感觉挺有戏的,值得关注一下

最近技术圈里聊Redis做轻量级消息队列的人越来越多了,感觉这东西突然就火了起来,其实Redis本身是个内存数据库,大家以前主要拿它做缓存、存会话或者计数器,但不知道从什么时候开始,不少团队开始尝试用它来扛消息队列的活儿——而且用得还挺顺手。

这事儿最早能追溯到一些中小型互联网公司的技术实践,比如有些团队在项目初期不想引入Kafka、RocketMQ那种重量级的消息中间件,觉得部署维护太麻烦,就开始用Redis的List结构通过LPUSH和BRPOP命令模拟简单的队列操作(来源:早期技术博客中的架构选型讨论),虽然功能简单,但能满足基本的生产者-消费者场景,比如发站内信、更新用户积分这种延迟不敏感的任务。

后来有人发现Redis 5.0版本推出的Streams数据类型简直是为队列场景量身定做的(来源:Redis官方文档更新日志),它支持消息持久化、消费者组模式,还能记录消息处理状态,比用List手动实现可靠多了,比如某个消费者读取消息后如果处理失败,消息不会被立刻删除,其他消费者可以接着处理——这基本达到了专业消息队列的可靠性水平,国内一些跨境电商平台在促销活动时,就用Redis Streams来处理订单状态流转,据说扛住了秒杀时的高并发(来源:2022年某技术沙龙分享案例)。

不过Redis队列的火爆其实反映了当下开发理念的变化,现在大家都讲究“够用就好”,特别是创业公司,业务变化快,没必要一开始就上复杂系统,像Redis这种多面手,既能当缓存又能当队列,一台服务器省下好几套中间件的成本(来源:某初创公司CTO在技术论坛的复盘帖),有人开玩笑说这是“穷人的消息队列”,但实际用起来发现性能一点也不穷——毕竟全内存操作,每秒处理十万级消息很轻松。

最近还有个小趋势:很多云服务商把Redis队列能力打包成产品,比如阿里云的Redis企业版就直接提供了消息队列功能(来源:阿里云产品功能页说明),这说明市场需求确实存在,甚至有些物联网项目也在用Redis做设备指令下发,因为物联网设备产生的消息量巨大但单条消息很小,用Redis处理比传统消息队列更经济。

但要说它能取代Kafka这些老牌队列,目前看还不现实,有人做过测试,Redis在消息堆积超过内存容量时会开始丢消息(来源:Github上某开源项目的压测报告),而且缺乏高级功能如消息回溯、延迟队列等,不过很多团队搞了补救方案:比如用Redis处理实时流量,同时用脚本把重要消息异步备份到MySQL做兜底(来源:某社交App的后端架构设计文档)。

现在网上关于Redis当队列的讨论越来越热闹,Github上相关开源组件 star 数涨得很快(来源:Github趋势页面),甚至有人基于Redis开发了分布式延迟队列,用有序集合实现定时任务,比数据库轮询高效得多,这种“土法炼钢”式的创新反而挺接地气,毕竟工程师们最懂自己业务的痛点。

Redis队列的走红有点像当年的MySQL——看似不适合却靠灵活性杀出一条路,或许未来会出现更多“Redis队列+”的混合架构,既保留简单易用的特点,又能通过组合其他工具弥补短板,至少目前看来,这个轻量级方案的生命力才刚刚开始显现。

Redis开源队列方案火起来了,未来感觉挺有戏的,值得关注一下