面试鸭 Java 后端面试题, Redis 三种高效缓存读写策略你了解吗?
面试鸭 Java 后端面试题, Redis 三种高效缓存读写策略你了解吗?
QA
Step 1
Q:: Redis 三种高效缓存读写策略你了解吗?
A:: Redis 的三种高效缓存读写策略包括:
1. **Cache Aside (旁路缓存模式)
**:应用程序先从缓存中读取数据,如果缓存没有命中,则从数据库中读取数据,并将数据放入缓存中。这种策略适用于读多写少的场景。
2. **Read Through (读穿缓存模式)
**:应用程序直接从缓存读取数据,如果缓存中没有数据,缓存自己去加载数据。这种策略对应用程序透明,但增加了缓存实现的复杂度。
3. **Write Through (写穿缓存模式)
**:应用程序对缓存和数据库进行同步写操作,保证缓存和数据库中的数据一致。这种策略适用于数据一致性要求较高的场景。
Step 2
Q:: Cache Aside (旁路缓存模式)
的优缺点是什么?
A:: 优点:
1.
实现简单,应用程序完全控制缓存。
2.
可以针对不同的业务需求设置不同的缓存策略。
缺点:
1.
需要应用程序管理缓存一致性。
2.
数据过期时,首次读取会有延迟。
Step 3
Q:: Read Through (读穿缓存模式)和Write Through (写穿缓存模式)
的异同点是什么?
A:: 相同点:
1.
都对应用程序透明,应用程序只需与缓存交互。
2.
都可以减少数据库的负载,提高系统的读写性能。
不同点:
1.
Read Through 只在读取数据时从数据库加载数据,而 Write Through 在写入数据时同步到数据库。
2.
Read Through 适用于读操作频繁的场景,而 Write Through 适用于读写操作都频繁且对一致性要求较高的场景。
Step 4
Q:: 什么是缓存雪崩?如何避免?
A:: 缓存雪崩是指在同一时间大量缓存失效,导致大量请求直接落到数据库,造成数据库压力过大甚至崩溃的情况。避免方法包括:
1.
给缓存的过期时间加上随机值,避免同一时间大量缓存同时失效。
2.
使用二级缓存策略,防止一级缓存失效时,所有请求直接落到数据库。
3.
加强缓存预热和更新策略,确保缓存始终有数据。
Step 5
Q:: 什么是缓存击穿?如何应对?
A:: 缓存击穿是指某些热点数据在缓存中失效后,大量请求直接穿透缓存访问数据库的情况。应对方法包括:
1.
使用互斥锁或分布式锁,在缓存失效时,只有一个线程去数据库加载数据,其他线程等待。
2.
对热点数据设置较长的过期时间,甚至永不过期,确保缓存中始终有数据。
Step 6
Q:: 什么是缓存穿透?如何处理?
A:: 缓存穿透是指查询不存在的数据,由于缓存不命中,每次请求都会访问数据库。处理方法包括:
1.
对查询结果为空的数据,缓存一个空值或特殊值,防止持续访问数据库。
2.
使用布隆过滤器在缓存层前进行拦截,避免无效请求落到缓存和数据库。