Redis面试题

1、如何实现缓存Redis和数据库的一致性?

  • 缓存失效策略:在更新数据库之后,立即使缓存中对应的数据失效,下次访问时重新从数据库中获取数据并更新缓存。这样可以确保数据库和缓存数据保持一致。

  • 读写时双写:在更新数据库时,同时更新缓存中对应的数据。这样可以确保数据库和缓存中的数据保持一致。但是这种方式会增加系统的复杂度,需要处理并发写入的情况。

  • 延时双删:在更新数据库时,先删除缓存中对应的数据,然后在事务提交成功后再重新写入缓存。这样可以避免并发写入导致数据不一致的情况。

  • 使用消息队列:数据库更新后发送消息到消息队列,缓存订阅消息队列,接收到消息后更新缓存。这种方式可以实现数据库和缓存的异步更新,减少对数据库的压力。

  • 定时同步:定时任务同步数据库和缓存中的数据,确保数据的一致性。这种方式可能会引入一定的延迟,不适合对数据要求实时性较高的场景。

总结:选择合适的策略取决于具体业务场景和需求,需要权衡数据的实时性、一致性和性能等因素来确定最适合的方案。

2、缓存数据更新是怎么维护的?比如说数据库变更了,缓存还没变,怎么办?

  • 主动更新:在数据库更新后,立即通知缓存进行更新。可以在数据库更新操作完成后,主动调用缓存API,将对应的缓存数据进行更新或失效。这种方式能够保证数据的实时性,但可能会增加数据库和缓存之间的耦合。

  • 定时更新:定期扫描数据库的变更,然后更新缓存中的数据。可以设置定时任务,定期检测数据库中数据的变化,然后更新相应的缓存数据。这种方式能够减少数据库和缓存之间的直接交互,但可能会引入一定的延迟。

  • 事件驱动:通过订阅数据库变更的事件,实时更新缓存数据。可以利用数据库的触发器或消息队列,在数据库数据变更时发送事件通知,让缓存系统监听这些事件并及时更新相应的缓存数据。这种方式能够实现数据的实时同步,减少了系统的耦合度。

  • 双写一致性:每次对数据库进行写操作时,同时更新缓存中的数据。这种方式要求对数据库和缓存的写操作必须在一个事务或操作中完成,确保数据在数据库和缓存中是一致的。然而,双写会增加系统的复杂性,需要额外处理并发写入的情况。

3、Redis的缓存穿透、击穿、雪崩?

  • 缓存穿透:指的是恶意输入导致缓存中没有对应的数据,而请求直接穿过缓存访问数据库,导致数据库压力过大。

通常解决缓存穿透的方法是在查询缓存之前进行有效性校验,比如使用布隆过滤器来过滤无效请求,或者在缓存中存储空对象来标记不存在的数据。

  • 缓存击穿:指的是某个热点数据突然失效,导致大量请求同时涌入访问数据库,因为缓存没命中,需要重新加载数据,造成数据库压力骤增。

解决缓存击穿的方法可以是设置热点数据永不过期,或者使用互斥锁(Mutex Lock)来保护数据库访问,确保只有一个请求更新缓存或数据库。

  • 缓存雪崩:指的是缓存中大量的数据同时失效或过期,导致大量请求直接访问数据库,因为缓存雪崩,数据库负载骤增,甚至引起系统崩溃。

为了避免缓存雪崩,可以采取多种策略,如设置不同的过期时间、使用热点数据预加载、使用分布式缓存和限流等手段。

相关推荐
ZFSS4 小时前
Localization Translate API 集成与使用指南
java·服务器·数据库·人工智能·mysql·ai编程
东风破1375 小时前
达梦DMDRS搭建、以及DMDRS双向同步
数据库·oracle·dm达梦数据库
KaMeidebaby6 小时前
卡梅德生物技术快报|抗独特型抗体开发:半抗原检测技术瓶颈拆解,抗独特型抗体开发工程化实践
前端·数据库·人工智能·其他·百度·新浪微博
NiceCloud喜云6 小时前
Claude Files API 深入:从上传、复用到配额管理的工程化指南
android·java·数据库·人工智能·python·json·飞书
A XMan.7 小时前
域名Whois信息查询V2版API接入指南
数据库
heimeiyingwang7 小时前
【架构实战】可观测性体系:从监控到全链路追踪
网络·数据库·架构
网管NO.17 小时前
SQL 日期函数全套精讲!时间格式化、日期加减、年月日提取,做日报周报直接套用
数据库·sql
杨云龙UP7 小时前
Linux 根分区被日志吃满?一次 58G Broker 日志清理实战_2026-05-20
linux·运维·服务器·数据库·hdfs·apache
sdk大全7 小时前
Studio 3T for MongoDB 2025.13.0
数据库·mongodb
码农阿豪7 小时前
平替MongoDB:金仓多模数据库助力电子证照国产化实践
数据库·mongodb