Redis缓存问题

作者: 蓝梅 | 来源:发表于2021-07-25 12:16 被阅读0次

一、缓存穿透

当查询时,key是一个不存在的数据,即不会命中缓存层,也不会命中数据库层,如果,同时大量出现不存在的key则会试数据库压力剧增;一般这种场景在业务代码或数据出现问题时,或者存在恶意攻击、爬虫等造成的空命中;

解决方案:

1.缓存空对象

如果当某个key值命中数据库时,不存在,则缓存 null 到当前key中,后续写入该key时,覆盖null值;
但该方案只能防止正常业务查询出现的数据问题,当存在恶意攻击时,大量的空命中,还是解决不了

2.布隆过滤器

布隆过滤器功能:当某个值经过布隆过滤器时,不存在,则该值肯定不存在;当布隆过滤器结果为存在时,该值可能存在
主要原理,布隆过滤器是一个二进制数组,用0来代表不存在,1来代表存在;然后对当前值进行Hash散列,最后取模,和HashMap取模方式有点相似,再把命中的数组位置,修改为1;
使用布隆过滤器的方案,在程序启动时,把所有key放入布隆过滤器,后续当获取key时,如果布隆过滤器结果为不存在,则直接返回;

二、缓存失效

当保存某一批热点key时,设置了相同的过期时间,当这一批热点key失效时,大量请求都会命中数据库

解决方案:

设置失效时间,使用 固定时间 + 随机时间 来避免热点数据,同时失效

三、缓存雪崩问题

当缓存层宕机后,所有查询都打向后端数据库,导致服务器压力过大

解决方案:

1.保证缓存层的高可用,使用哨兵或集群等提高服务的可用性

但是不管是哨兵还是集群,都会存在宕机时,短暂的不可用,导致查询打向后端数据库

2.服务降级,熔断

可以针对非核心业务进行降级,或者熔断

相关文章

  • PHP问题汇总

    php异常级别 redis持久化机制 redis缓存雪崩和缓存穿透 其他redis问题 redis地理位置 mys...

  • Redis总结

    一、数据类型 二、使用场景 二、redis缓存使用总结 三、redis缓存常见问题 四、布隆过滤器的方式解决缓存穿透问题

  • 高并发架构修炼

    redis缓存策略 分布式缓存一致性 redis常见的问题 redis分布式锁 http://ifeve.com/...

  • Redis常见穿透问题、击穿问题、雪崩问题解决方案

    Redis常见穿透问题、击穿问题、雪崩问题解决方案 穿透问题 定义 Redis 缓存穿透指的是大量请求Redis缓...

  • springboot与缓存

    问题一:使用缓存步骤 问题二:常用的缓存注解介绍 问题三:springboot与redis springboot要...

  • 六、Redis 的缓存异常处理 —— 缓存雪崩、缓存击穿、缓存穿

    在实际应用 Redis 过程中,如果将 Redis 作为数据库的缓存,经常会遇到这几个问题:缓存雪崩、缓存击穿、缓...

  • Redis缓存问题

    一、缓存穿透 1.1 缓存穿透是什么 当查询的数据是缓存和数据库都不存在的数据,也就是不是真是的数据时,每次查询都...

  • redis缓存问题

    1. 缓存雪崩:是指在某一个时间段,缓存集中过期失效或者redis服务器挂了,导致数据全部请求DB。 比如,设置的...

  • redis缓存问题

    缓存更新策略 1.lru/lfu/fifo - redis自带,根据maxmemory-policy设置,数据无法...

  • Redis 缓存问题

    Redis 缓存问题 缓存穿透 缓存穿透问题描述 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的...

网友评论

    本文标题:Redis缓存问题

    本文链接:https://www.haomeiwen.com/subject/utnbmltx.html