面试题答案
一键面试系统架构设计
- 客户端:发起用户行为数据查询请求。
- 应用服务器:接收客户端请求,调用缓存层和数据库层获取数据。
- 缓存层(Redis):存储热点用户行为数据,提供快速的数据读取服务。
- 数据库层(MySQL):持久化存储所有用户行为数据。
Redis 和 MySQL 协同工作
数据一致性
- 写操作:
- 先写MySQL,确保数据持久化。
- 再删除Redis中对应缓存数据,保证下次查询时从MySQL重新加载最新数据。
- 读操作:
- 先从Redis读取数据,如果存在则直接返回。
- 如果Redis中不存在,从MySQL读取数据,返回给客户端,并将数据写入Redis缓存。
查询高效性
- 热点数据缓存:Redis基于内存存储,读写速度极快。将高频访问的用户行为数据存储在Redis中,减少对MySQL的直接查询压力,提高查询响应速度。
- 缓存预加载:在系统初始化或业务低峰期,将部分热门数据预先加载到Redis缓存中,确保高并发时能快速响应查询请求。
- 批量查询:应用服务器可以将多个查询请求合并,一次性从Redis获取多个数据,减少与Redis的交互次数,提高查询效率。
系统高可用性
- Redis高可用:
- 使用Redis Cluster或主从复制架构。Redis Cluster通过数据分片和节点自动故障转移机制,保证数据的分布式存储和高可用性。主从复制架构中,主节点负责写操作,从节点复制主节点数据,当主节点故障时,从节点可以晋升为主节点继续提供服务。
- 配置哨兵(Sentinel),监控Redis节点状态,自动进行故障检测和转移,确保Redis服务的连续性。
- MySQL高可用:
- 采用主从复制架构,主库负责写操作,从库复制主库数据,分担读压力。当主库出现故障时,通过手动或自动方式将从库提升为主库。
- 引入分布式数据库中间件,如MyCAT、ShardingSphere等,实现数据的分片存储和读写分离,提高系统的扩展性和可用性。同时,这些中间件具备故障检测和自动切换功能,保障MySQL服务的高可用性。