Redis面试题
Redis面试题
Redis缓存与数据库的一致性
为什么会出现缓存与数据库不一致的情况
- 在客户端查询类的操作中,程序会优先读取
Redis缓存数据,如果缓存数据不存在,则从数据库中查询数据,并写入缓存。 - 在查询和更新并发的操作中,当有一个客户端执行更新操作删除了
Redis缓存数据后继续修改数据库数据过程中出现了延迟或错误,此时当有一个客户端查询数据时,就会从数据库中查询数据,并写入缓存(老的数据)。
最终一致性(延迟双杀)
最终一致性是指,在更新操作时,在更新前删除缓存数据,在更新后再 延迟删除缓存数据【防止并发时其他请求写入缓存数据】 (双删)。进行两次操作,最终只会出现一次数据不一致的情况
缓存删除失败的情况
- 利用
mq来进行监听删除结果 删除失败后进行重试 缺点 业务代码耦合高 - 利用阿里的开源框架
Canal主要用途时基于MySQL数据库增量日志解析,提供增量数据订阅和消费
强一致性
- 强一致性是指,无论如何都保证数据一致性。需要在更新操作时,加入锁,防止多个客户端同时更新数据。
- 加入锁后,影响系统吞吐量,且容易产生死锁。不建议使用
分布式锁超时,但任务没处理完
- 使用
Watchdog(看门狗)为任务无限续期 - 如果是大任务,需要将任务拆分 进行分段处理
- 兜底方法:幂等+合理的过期时间