redis缓存策略和持久化机制(浅聊Redis缓存穿透)

1、什么是缓存穿透?

缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。

2、常见的解决缓存穿透有哪些方法

(1)缓存空对象

优点:实现简单,维护方便

缺点:额外的内存消耗,和可能造成短期的不一致

针对缺点内存消耗我们可以设置key的过期时间,针对于短期不一致性,我们可以在更新数据库的同时更新缓存;

redis缓存策略和持久化机制(浅聊Redis缓存穿透)(1)

(1)布隆过滤器

redis缓存策略和持久化机制(浅聊Redis缓存穿透)(2)

对于布隆过滤器的实现,我们放在后面的章节中讲解;

3、代码实现缓存空对象,解决缓存穿透现象:

redis缓存策略和持久化机制(浅聊Redis缓存穿透)(3)

public <R,ID> R queryWithPassThrough( String keyPrefix, ID id, Class<R> type, Function<ID, R> dbFallback, Long time, TimeUnit unit){ String key = keyPrefix id; // 1.从redis查询商铺缓存 String JSON = stringRedisTemplate.opsForValue().get(key); // 2.判断是否存在 if (StrUtil.isNotBlank(json)) { // 3.存在,直接返回 return JSONUtil.toBean(json, type); } // 判断命中的是否是空值 if (json != null) { // 返回一个错误信息 return null; } // 4.不存在,根据id查询数据库 R r = dbFallback.apply(id); // 5.不存在,返回错误 if (r == null) { // 将空值写入redis stringRedisTemplate.opsForValue().set(key, "", CACHE_NULL_TTL, TimeUnit.MINUTES); // 返回错误信息 return null; } // 6.存在,写入redis this.set(key, r, time, unit); return r; }

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页