news 2026/2/21 10:44:28

艾体宝干货 |【Redis实用技巧#5】掌握 Redis 与 Kafka,搞定系统设计

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
艾体宝干货 |【Redis实用技巧#5】掌握 Redis 与 Kafka,搞定系统设计

多数人其实不需要记住世界上所有的数据库、消息队列或缓存策略。只需要深入理解两个工具:Redis 和 Kafka。掌握了它们,就能解决 80% 的系统设计难题。

为什么是这两个?

Redis 解决速度,Kafka 解决扩展。二者共同构成了现代分布式系统的支柱。从 Netflix 的推荐引擎到 Uber 的实时调度系统,几乎所有的独角兽初创公司和科技巨头都依赖这套组合。

Redis:系统性能的支柱

Redis 是一个内存数据存储,相当于整个系统的短期记忆。当毫秒级响应成为系统的关键指标时,Redis 总能满足要求,从不掉链子。

典型使用场景

缓存:最典型的用途。存储频繁访问的数据,避免反复查询数据库。

import redis import json r = redis.Redis(host='localhost', port=6379)# 缓存用户资料def get_user_profile(user_id): cache_key = f"user:{user_id}" cached = r.get(cache_key)if cached:return json.loads(cached)# 从数据库查询 profile = database_query(user_id) r.setex(cache_key, 3600, json.dumps(profile))return profile

会话管理:存储用户会话,避免冲击主数据库。

const session = await redis.get(`session:${sessionId}`);if (!session) {return res.status(401).json({ error: '会话已过期' });}

限流:使用简单的计数器防止 API 滥用。

def check_rate_limit(user_id): key = f"rate_limit:{user_id}" count = r.incr(key)if count == 1: r.expire(key, 60) # 60秒时间窗口return count <= 100 # 每分钟允许100次请求

Redis 架构模式

Kafka:系统的扩展引擎

Kafka 是一个分布式事件流平台。可以把它看作一个功能及其强大的拓展型消息队列,支援消息的持久化,并且每秒能处理数百万个事件。

核心概念

  • Topics(主题):消息的分类。每个主题可以有多个分区以实现并行处理。

  • Producers(生产者):向 Kafka 写入事件的服务。

  • Consumers(消费者):从 Kafka 读取事件的服务。

实现示例

// 生产者 - 订单服务 Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); KafkaProducer<String, String> producer = new KafkaProducer<>(props);// 发布订单事件 ProducerRecord<String, String> record = new ProducerRecord<>("orders", orderId, orderData); producer.send(record);// 消费者 - 库存服务 Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); props.put("group.id", "inventory-service"); props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props); consumer.subscribe(Arrays.asList("orders"));while (true) { ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));for (ConsumerRecord<String, String> record : records) {update_inventory(record.value());}}

Kafka 架构模式

强强联合:Redis + Kafka 组合使用

重点来了,将这两个工具结合起来,你即可以构建出既快速又可扩展的系统。

模式:事件驱动的缓存失效

# 处理更新事件并使缓存失效的消费者def handle_user_update_event(event): user_id = event['user_id'] cache_key = f"user:{user_id}"# 使缓存失效 redis_client.delete(cache_key)# 或者主动更新缓存 updated_data = event['data'] redis_client.setex(cache_key, 3600, json.dumps(updated_data))

完整的系统架构

何时使用

使用 Redis 的场景:

  • 需要亚毫秒级响应时间

  • 数据访问模式以读为主

  • 需要实现限流、会话管理或排行榜功能

使用 Kafka 的场景:

  • 需要解耦服务

  • 多个消费者需要相同的数据

  • 需要事件重放或审计追踪

  • 正在构建实时数据管道

需要快?用 Redis。需要在服务间扩展?用 Kafka。

大多数人根本不需要了解十七八种不同的数据库,只需要知道何时该缓存,何时该队列,以及这两个工具如何解决分布式系统的根本问题:速度与扩展。

掌握 Redis 和 Kafka。其他一切,都只是更精进的领域,真用到了再学也不晚。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/7 19:24:31

12、《Lotus Domino 6 与外部数据库集成指南》

《Lotus Domino 6 与外部数据库集成指南》 在当今的数据驱动世界中,将企业应用程序与外部数据库集成是提高效率和数据利用率的关键。本文将详细介绍如何使用 Lotus Domino 6 与 DB2 和 MySQL 等外部数据库进行集成,包括从访问外部数据到创建应用程序的具体步骤。 1. 使用 D…

作者头像 李华
网站建设 2026/2/17 18:27:26

Postman便携版完整指南:免安装API测试神器快速上手

Postman便携版完整指南&#xff1a;免安装API测试神器快速上手 【免费下载链接】postman-portable &#x1f680; Postman portable for Windows 项目地址: https://gitcode.com/gh_mirrors/po/postman-portable 还在为复杂的API工具安装过程而烦恼吗&#xff1f;Postma…

作者头像 李华
网站建设 2026/2/21 7:42:39

Archipack插件完整安装教程:快速解决macOS兼容性问题

Archipack插件完整安装教程&#xff1a;快速解决macOS兼容性问题 【免费下载链接】archipack Archipack for blender 2.79 项目地址: https://gitcode.com/gh_mirrors/ar/archipack 还在为在macOS系统上安装Archipack插件而烦恼吗&#xff1f;别担心&#xff0c;这篇文章…

作者头像 李华
网站建设 2026/2/19 8:45:43

UV-K5对讲机固件定制指南:从新手到高手的完整教程

UV-K5对讲机固件定制指南&#xff1a;从新手到高手的完整教程 【免费下载链接】uv-k5-firmware-custom This is a fork of Egzumer https://github.com/egzumer/uv-k5-firmware-custom 项目地址: https://gitcode.com/gh_mirrors/uvk/uv-k5-firmware-custom &#x1f4a…

作者头像 李华