Redis面试题

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

相关推荐
用户3169353811832 天前
Java连接Redis
redis
倔强的石头_2 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
冬奇Lab3 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
ClouGence3 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle
无响应de神3 天前
三、用户与权限管理
数据库·mysql
小小工匠4 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
麦聪聊数据4 天前
数据服务化时代:企业数据能力输出的核心路径
数据库
shushangyun_4 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
DARLING Zero two♡4 天前
【MySQL数据库】数据类型与表约束
数据库·mysql