面试题答案
一键面试分布式缓存在微服务架构性能调优中的作用
- 减轻数据库压力:在微服务架构中,多个服务可能频繁访问数据库。分布式缓存可以将常用数据存储在内存中,当服务请求数据时,优先从缓存获取,减少对数据库的直接访问,例如电商应用中商品的基本信息(名称、价格等),大量读请求可从缓存获取,降低数据库负载。
- 提高响应速度:由于缓存的数据存储在内存中,其读写速度远快于磁盘存储的数据库。服务获取数据的时间大大缩短,从而提高整个系统的响应速度,像新闻资讯类应用,文章内容从缓存读取,能快速展示给用户。
- 增强系统扩展性:分布式缓存可以方便地进行水平扩展,通过增加缓存节点来应对不断增长的业务流量。当业务量上升时,可轻松扩展缓存集群,保障系统性能不受影响,适用于用户量快速增长的互联网应用。
避免数据一致性问题的策略
- 读写策略
- 读写穿透:写操作时,同时更新数据库和缓存。读操作时,先查询缓存,若缓存不存在则查询数据库,并将结果写入缓存。例如在订单系统中更新订单状态时,同时更新数据库和缓存。但这种方式可能会因为数据库写操作慢影响整体性能。
- 写后更新缓存:写操作先更新数据库,成功后再更新缓存。此方式能保证数据库操作的原子性,但存在一定时间窗口内数据库和缓存数据不一致问题,如商品库存更新场景。为减少不一致时间,可通过异步任务尽快更新缓存。
- 删除缓存:写操作更新数据库后删除缓存,下次读操作会重新从数据库加载数据到缓存。在博客系统中文章更新后删除缓存,新的请求会重新构建缓存数据。注意删除缓存失败时需有重试机制。
- 缓存版本控制:为缓存数据设置版本号,每次数据更新时版本号递增。读操作根据版本号判断缓存数据是否有效,若无效则重新从数据库加载数据并更新缓存和版本号。在配置信息管理系统中可采用此方法。
避免缓存雪崩问题的策略
- 设置不同的过期时间:避免大量缓存数据在同一时间过期。在电商大促活动中,对不同商品的缓存设置随机的过期时间,比如在 1 - 2 小时内随机设置,这样可分散过期压力,防止大量请求瞬间涌入数据库。
- 使用二级缓存:一级缓存失效后,从二级缓存获取数据。例如先从 Redis 主缓存获取数据,若失效则从本地 ehcache 二级缓存获取,减轻数据库压力。同时可定期更新二级缓存数据,确保数据的时效性。
- 缓存预热:在系统上线或高并发场景前,提前将热点数据加载到缓存中。像新游戏上线前,将游戏的初始配置数据、热门关卡数据等提前加载到缓存,避免上线瞬间缓存缺失导致大量请求冲击数据库。
- 搭建高可用缓存集群:采用 Redis 集群等方式,当部分缓存节点失效时,其他节点仍可提供服务。同时结合哨兵或 Cluster 模式进行自动故障转移,确保缓存服务的稳定性。