# 中间件

# MySQL

# B+Tree 索引

  • InnoDB 主键为聚簇索引,叶子存整行;二级索引叶子存主键,回表查完整行。B+ 树多路平衡、叶子有序链表,适合范围与排序。
  • 最左前缀:联合索引 (a,b,c) 可支持 a、a,b、a,b,c 的查询与排序;中间断则后面列无法用索引。

# 事务 ACID

  • 原子性:undo log 回滚。持久性:redo log 先写、崩溃恢复重做。隔离性:锁 + MVCC。一致性:业务约束,由前三点与应用保证。

# MVCC

  • 多版本并发控制;通过 undo 链 + 行隐藏字段(DB_TRX_ID、DB_ROLL_PTR)及 Read View 判断可见性。读已提交、可重复读 通过不同 Read View 策略实现;可重复读 在 RR 下可减少幻读(当前读仍要锁)。

# 锁机制

  • 行锁、间隙锁、临键锁;共享锁 S、排他锁 X。意向锁 IS/IX。加锁顺序一致防死锁。死锁检测或超时回滚。

# 主从复制

  • 异步/半同步/组复制;binlog 格式 statement/row/mixed。主写 binlog,从 IO 线程拉取写 relay log,SQL 线程重放。主从延迟导致读从库可能读到旧数据,需业务容忍或强制读主。

# 分库分表

  • 垂直:按业务拆库表。水平:按分片键拆库表;路由策略(取模、范围、一致性哈希);跨库 join/聚合、分布式 ID、分布式事务需额外方案。ShardingSphere、MyCat 等中间件。

# Redis

# 五大数据结构

  • String:缓存、计数、分布式锁;SET NX EX、INCR。
  • Hash:对象字段;HGETALL、HINCRBY。
  • List:列表、队列、栈;LPUSH/RPUSH、LPOP/RPOP、BRPOP 阻塞。
  • Set:去重、交集并集;SADD、SINTER、SUNION。
  • ZSet:有序,score;ZADD、ZRANGE、ZRANK;排行榜、延迟队列。

# 持久化

  • RDB:快照;bgsave fork 子进程写;恢复快,可能丢最后一次快照后的数据。
  • AOF:追加写命令;可 fsync 每次/每秒/由系统;重写压缩。可 RDB+AOF,AOF 含 RDB 头做混合持久化。

# 缓存穿透 / 击穿 / 雪崩

  • 穿透:查不存在 key,打穿到 DB。解决:布隆过滤器、空值缓存短 TTL。
  • 击穿:热点 key 过期瞬间大量请求打 DB。解决:互斥锁(只有一个线程查 DB 并回填)、逻辑过期(不设真实过期,异步更新)。
  • 雪崩:大量 key 同时过期或 Redis 宕机,流量打垮 DB。解决:过期时间加随机、多级缓存、限流降级、集群与持久化。

# 分布式锁

  • SET key value NX EX seconds;value 唯一标识,释放时校验再 DEL 或 Lua 脚本保证原子。 Redisson:看门狗续期、可重入、红锁(多实例)。

# 集群模式

  • 主从:读写分离,从只读;主挂需手动或哨兵提升。
  • 哨兵:监控、自动选主、通知客户端。
  • Cluster:分片 16384 slot;CRC16(key)%16384 落槽;节点间 gossip;不支持跨槽命令,需 hash tag 或客户端分片。

# 消息队列

# Kafka

  • 分区、副本、消费者组;高吞吐、持久化、回溯消费。Producer 可指定 key 做分区;Consumer 拉取、提交 offset。适用日志、流处理。

# RocketMQ

  • Topic、Tag、顺序消息、延迟消息、事务消息。NameServer 做路由;Broker 存消息。适用订单、解耦、削峰。

# RabbitMQ

  • Exchange(direct/topic/fanout/headers)+ 队列 + 绑定;消息确认、死信队列、延迟插件。适用复杂路由、企业集成。

# 消息可靠性

  • 生产者:确认机制(ack)、重试、落库补偿。Broker:持久化、副本。消费者:手动 ack、幂等处理、死信与重试队列。

# 幂等设计

  • 业务键去重(Redis/DB 唯一)、消息 id 去重、状态机(已处理则跳过)。

# 顺序消息

  • 单分区或按 key 路由到同一分区;消费者单线程或按 key 串行处理。

# 延迟队列

  • RabbitMQ 延迟插件、RocketMQ 定时消息、Redis 有序集合 + 轮询、专用延迟队列表 + 定时任务。

# Elasticsearch

# 倒排索引

  • 词项 → 文档列表(含位置、频率);全文检索先分词再查倒排,算分排序。

# 分词器

  • 内置 standard、ik(中文)等;可自定义 analyzer;mapping 中指定。

# 聚合查询

  • 桶聚合(terms、range、date_histogram)、指标聚合(sum、avg、min、max)、管道聚合。用于统计、多维分析。

# 日志检索

  • 与 Logstash/Filebeat 配合;按时间、级别、关键词检索;Kibana 可视化。