缓存穿透
说明:缓存穿透是指客户端请求缓存和数据库都不存在的数据,这样缓存永远不会生效,这些请求都会打到数据库上。
如图:每次请求都经过3、4、5,每次都要操作数据库,也就是缓存无效了。如果是1w 请求,1w 请求最终都打到数据库上。

解决方案
常见的解决方案有两种:缓存空对象,使用布隆过滤器;
- 缓存空对象
客户端请求缓存和数据库都不存在的数据,返回时将控制设置到redis中,并且设置过期时间。

public Product getProductCache(String productId) {
// 从缓存中获取数据
String key = (String)redisTemplate.opsForValue().get("productId");
if (key == null) {
// 从数据库获取查询
Product product = ProductService.selectByProductId(productId);
if (Objects.nonNull(product)) {
// 数据库存在数据,则重新设置缓存
redisTemplate.opsForValue().set(productId, JSON.toJSONString(product), 3000L);
return prod

本文介绍了缓存中的三大问题——缓存穿透、缓存击穿和缓存雪崩,详细解析了它们的现象及对数据库的影响,并提供了相应的解决方案,包括缓存空对象、使用布隆过滤器、加互斥锁、设置热点数据不过期等策略。
最低0.47元/天 解锁文章
1981

被折叠的 条评论
为什么被折叠?



