面试官:如何保证缓存和数据库的一致性

缓存的重要性

  • 定义:缓存是暂时保存数据的存储机制,用于加速数据读取和访问。
  • 目的:用更多的存储空间来存储重复使用或计算的数据,减少数据重新获取或计算的时间。
  • 类型
    • 本地缓存:如JDK的HashMap、ConcurrentHashMap,Ehcache、Guava Cache、Spring Cache、Caffeine等。
    • 分布式缓存:如Redis,可独立部署在不同服务器。

缓存一致性问题

  • 原因
    • 缓存过期
    • 写操作延迟
    • 并发操作导致的竞态条件
    • 缓存失效策略不当
    • 网络延迟或故障

解决方案

  • Cache Aside 模式:读时先查缓存,未命中则从数据库读取并更新缓存;写时先更新数据库,再使缓存失效。
  • 分布式锁:并发写操作时使用,避免竞态条件。
  • 双写一致性:同时更新数据库和缓存。
  • 延迟双删:写操作时先删除缓存,数据库更新后再删除缓存。
  • 版本控制:使用版本号或时间戳检查数据一致性。
  • 监控和告警:监控数据,发现不一致时及时处理。

常见缓存更新策略

  • Cache Aside Pattern:优点是读取性能高和实现简单;缺点是写操作较慢和数据一致性挑战。
  • Read/Write Through Pattern:优点是数据一致性好;缺点是实现复杂,依赖缓存高可用性。
  • Write Behind Pattern:优点是写操作性能高;缺点是存在数据丢失风险和数据一致性较差。

PmHub 实践

  • 数据读取:先查询缓存,未命中则查询数据库后更新缓存。
  • 数据更新:先更新数据库,然后删除缓存。

面试准备

  • 项目中的缓存一致性:根据理解作答,展示真实性。
  • Redis 数据类型:基础问题,需熟悉。
  • 删除缓存而非更新:减少服务器资源消耗,避免脏读,减少并发冲突,避免双写问题。

其他要点

  • Cache Aside 局限性:写操作性能较低,数据一致性挑战,缓存预热问题,复杂的失效策略,过期数据风险。
  • 解决方案不完美性:需根据应用场景设计合理的缓存更新和失效策略。
  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值