序
这段时间在准备软考高级架构师,已经有过一次失败经历的笔者发现只靠教材的内容并不能很好地应对第二大项的案例分析题,尤其是很久没有接触过大型网站的后端服务架构设计,因此想通过李智慧老师的《大型网站技术架构:核心原理与案例分析》 再好好复习一遍架构设计。刚好近期DeepSeek大火,通过与它交流阅读时遇到的问题和心得,来加深对架构设计的理解与记忆。
这一系列会按书实际的章节来组织,方便查询。
大型网站架构演化
分布式缓存 Redis的使用
在网站架构演化过程中,引入分布式缓存是提升系统性能和可扩展性的关键步骤。Redis 是目前最常用的分布式缓存技术之一,以下是其核心特性和使用方式:
Redis 核心特性
- 高性能:基于内存操作,支持每秒数十万级读写。
- 数据结构丰富:支持字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)等。
- 持久化:提供 RDB(快照)和 AOF(日志追加)两种数据持久化方案。
- 分布式支持:通过 Redis Cluster 实现分片存储和高可用,或通过 Sentinel 实现主从故障转移。
- 原子操作:支持事务和 Lua 脚本,保证复杂操作的原子性。
Redis 的典型使用方式
1. 基础部署
- 单节点模式(开发/测试):
# 启动 Redis 服务 redis-server
- 集群模式(生产环境):
# 配置 Redis Cluster(至少 3 主 3 从) redis-cli --cluster create 192.168.1.1:7000 192.168.1.2:7001 ... --cluster-replicas 1
2. 数据操作示例
-
缓存数据库查询结果(缓解数据库压力):
import redis # 连接 Redis r = redis.Redis(host='redis-host', port=6379) def get_user(user_id): # 先查缓存 user_data = r.get(f"user:{ user_id}") if not user_data: # 缓存未命中,查数据库并写入缓存(设置过期时间) user_data = db.query("SELECT * FROM users WHERE id = ?", user_id) r.setex(f"user:{ user_id}", 3600, user_data) # 缓存1小时 return user_data
-
分布式会话存储(替代单机 Session):
// Spring Boot 中配置 Redis 存储 Session @Configuration @EnableRedisHttpSession public class SessionConfig { @Bean public RedisConnectionFactory redisConnectionFactory() { return new LettuceConnectionFactory("redis-host", 6379