广州网站建设集团,加强网站建设说明报告范文,wordpress 免费 模板,网站建设的主题什么比较好目录
一、缓存预热
1.1 缓存预热是什么#xff1f;
1.2 解决方案#xff1a;
二、缓存雪崩
2.1 缓存雪崩是什么#xff1f;怎么发生的#xff1f;
2.2 怎么解决
三、缓存穿透
3.1 是什么#xff1f;怎么产生的呢#xff1f;
3.2 解决方案 3.2.1、采用回写增强
1.2 解决方案
二、缓存雪崩
2.1 缓存雪崩是什么怎么发生的
2.2 怎么解决
三、缓存穿透
3.1 是什么怎么产生的呢
3.2 解决方案 3.2.1、采用回写增强 3.2.2、加上一个布隆过滤器
四、缓存击穿
4.1 是什么
4.2 怎么解决
五、总结 一、缓存预热
1.1 缓存预热是什么
缓存预热是指在系统启动或者高峰期之前提前将数据加载到缓存中避免在用户请求的时候先查询数据库这样第一个查询的人就会比较慢再把查询结果回写到redis当中去。
1.2 解决方案
为了防止用户访问的时候Redis中没有数据所以提前将热点数据保存到Redis里面通过LRU数据删除策略可以得到高频数据队列通过脚本的方式将热点数据提前加入。
二、缓存雪崩
2.1 缓存雪崩是什么怎么发生的
缓存雪崩是指在缓存系统中大量缓存数据同时失效或过期导致请求直接打到数据库或后端服务从而引起数据库压力过大或服务崩溃的现象。
redis 主机挂了 Redis全盘崩溃偏硬件运维redis 中有大量key 同时过期大面积失效偏软件开发
2.2 怎么解决
1、针对于redis服务器问题可以采用redis的高并发策略使用主从复制 哨兵 或者直接使用redis集群模式并且这时候需要开启redis的持久化机制方便从机上位的时候能够快速恢复之前的数据。
2、多缓存预防雪崩不仅仅只用redis这么一个缓存也可以在本地加上一个ehcache缓存把哪些高频信息给存储进来这样就不需要所有的数据都需要去redis上面去找了。
3、服务降级 直接就不让用户前来访问容易出现问题的信息了直接提示当前访问人数过多请稍后再试。 4、人民币玩家直接使用阿里云的云数据库redis版
三、缓存穿透
3.1 是什么怎么产生的呢
缓存穿透 就是请求去查询一条数据先查redisredis里面没有再查mysqlmysql里面无都查询不到该条记录但是请求每次都会打到数据库上面去导致后台数据库压力暴增
缓存穿透可能是由于恶意攻击、缓存设置不当或者数据更新频繁等原因引起的。
缓存穿透最怕的情况就是黑客恶意攻击比如他现在知道了你key的格式abc xxx正好这个数据你的redis没有MySQL当中也没有那么他就会一直查这个导致你的redisMySQL接受一次次的暴击。怎么解决这个问题呢
3.2 解决方案 3.2.1、采用回写增强
既然都是黑客了逃过布隆过滤器还不是简简单单
如果发生了缓存穿透我们可以针对要查询的数据在Redis里存一个和业务部门商量后确定的缺省值(比如零、负数、defaultNull等)。
比如键uid:abcdxxx值defaultNull作为案例的key和value
先去redis查键uid:abcdxxx没有再去mysql查没有获得 这就发生了一次穿透现象。
but可以增强回写机制
mysql也查不到的话也让redis存入刚刚查不到的key并保护mysql。这样等下次再来查这个值的时候就不会发生缓存穿透了。
但是此方法架不住黑客的恶意攻击有缺陷......只能解决key相同的情况假如黑客可以找到不同的key总不能每个key都回写到redis里吧这时候我们就需要新的解决方法了。 3.2.2、加上一个布隆过滤器
布隆过滤器可以过滤掉大部分不存在的情况当然也有一定的漏判率。我们在数据访问redis之前可以先让他去通过一下布隆过滤器如果布隆中没有那么就是肯定没有直接返回就行了。 四、缓存击穿
4.1 是什么
缓存击穿就是大量请求同时查询一个key或一批时此时这个key正好失效了就会导致大量的请求都打到数据库上面去也就是热点key突然都失效了MySQL承受高并发量
简单说就是热点key突然失效导致MySQL被暴打
4.2 怎么解决 设置热点数据的永不过期策略对于一些非常热门的数据可以将其缓存时间设置为永不过期这样可以避免缓存失效导致的击穿问题。但需要注意这种方式可能会导致缓存数据不及时更新的问题。 互斥更新采用双检加锁机制 多个线程同时去查询数据库的这条数据那么我们可以在第一个查询数据的请求上使用一个 互斥锁来锁住它。 其他的线程走到这一步拿不到锁就等着等第一个线程查询到了数据然后做缓存。后面的线程进来发现已经有缓存了就直接走缓存。
五、总结