MQ 串讲
串讲思路:MQ是什么 → 分类选型 → RocketMQ架构 → 持久化 → 消息类型 → 常见问题 一、什么是 MQ MQ(Message Queue)是应用之间的异步通信中间件:生产者把消息投进队列,消费者从队列里取出来处理,双方不需要直接…
串讲思路:MQ是什么 → 分类选型 → RocketMQ架构 → 持久化 → 消息类型 → 常见问题 一、什么是 MQ MQ(Message Queue)是应用之间的异步通信中间件:生产者把消息投进队列,消费者从队列里取出来处理,双方不需要直接…
Redis 重启之后数据没了,是最让人心慌的事故之一。要么是没开持久化,要么是配了但没生效。这篇把 RDB 和 AOF 讲清楚。 RDB:快照 按条件触发生成整个数据集的二进制快照: save 900 1 # 900 秒内至少 1 个…
很多人写单测半途而废,不是因为不会写断言,而是因为测试一跑就要连数据库、发 HTTP、等定时任务,慢且不稳定。关键是把外部依赖挡在边界之外。 一、先测纯逻辑,别急着测全流程 把一个方法里「算」的部分和「取数…
有序集合(zset)是 Redis 里最有用的结构之一:每个元素带一个分数,按分数自动排序。排行榜和延时队列都是它的直接应用。 排行榜 # 加分 ZINCRBY rank:2025-07 1 user:1001 # 前 10 名(降序,带分数) ZREVRANG…
「每个分类取最新一条」是 SQL 里的经典难题。MySQL 8 之前只能靠自连接或者变量,写法别扭还有性能问题。有了窗口函数之后,这件事变得很自然。 数据准备 CREATE TABLE article ( id INT PRIMARY KEY, cat…
Redis 内存到上限之后的行为,由 maxmemory-policy 决定。选错了,轻则缓存命中率下降,重则数据丢失、请求变慢。 先看现状 redis-cli INFO memory | grep -E 'used_memory_human|maxmemory_human|maxmemory_policy…
后端接口一旦有外部调用方,字段就不能说删就删。记录一套比较稳妥的演进流程,尤其适合有 App 客户端的场景——老版本 App 可能一年后还在被使用。 一、加字段容易,删字段难 新增字段对老客户端通常是安全的(只要…
演练比事故便宜。这篇记录一次「假设有人执行了不带 WHERE 的 DELETE」的完整恢复过程,全程在测试库做。 场景设定 凌晨 2 点,有人执行: DELETE FROM orders; -- 忘了 WHERE 3 万条订单消失。备份是每天 3 点…
凌晨被告警叫醒,队列积压几十万条。慌是没用的,按顺序处理。 第一步:确认是不是真积压 # RabbitMQ rabbitmqctl list_queues name messages messages_ready messages_unacknowledged # Kafka kafka-consumer-gro…
配置混乱的典型症状:改一个超时时间要重新打包;测试环境连到了生产数据库;某个开关只在一台机器上生效。把配置分层管理,能避开大部分这类事故。 一、按变化频率和敏感程度分层 类型 例子 放哪里 环境相…
「下单成功后发一条通知」这类需求,最容易写成:先写订单,再发消息。可这两步之间一旦进程崩了,订单成了、消息没了;反过来先发消息再写订单,又可能消息发出去了订单没成。分布式事务框架能解决,但对多数项目…
登录态看起来是个小功能,但一旦选错方案,后面做多端登录、强制下线、权限变更都会很别扭。把三种常见方案的取舍理清楚。 一、服务端 Session 服务端保存会话状态,浏览器只拿一个随机 session_id。 Cookie: sid=9…