Redis面试题

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

相关推荐
Francek Chen6 分钟前
【大数据存储与管理】分布式数据库HBase:03 HBase数据模型
大数据·数据库·hadoop·分布式·hdfs·hbase
小吴编程之路7 小时前
MySQL 索引核心特性深度解析:从底层原理到实操应用
数据库·mysql
~莫子7 小时前
MySQL集群技术
数据库·mysql
凤山老林8 小时前
SpringBoot 使用 H2 文本数据库构建轻量级应用
java·数据库·spring boot·后端
就不掉头发8 小时前
Linux与数据库进阶
数据库
与衫8 小时前
Gudu SQL Omni 技术深度解析
数据库·sql
咖啡の猫8 小时前
Redis桌面客户端
数据库·redis·缓存
oradh8 小时前
Oracle 11g数据库软件和数据库静默安装
数据库·oracle
what丶k8 小时前
如何保证 Redis 与 MySQL 数据一致性?后端必备实践指南
数据库·redis·mysql
_半夏曲9 小时前
PostgreSQL 13、14、15 区别
数据库·postgresql