大学生创业网站建设方案,首尔面积,网站内容如何自动关联新浪微博,wordpress插件搬家1. 缓存预热
预先将MySQL中的数据同步至Redis的过程
2. 缓存雪崩
Redis主机出现故障#xff0c;或有大量的key同时过期大面积失效导致Redis不可用
Redis中key设置为永不过期#xff0c;或者过期时间错开Redis缓存集群实现高可用多缓存结合预防雪崩服务降级
3. 缓存穿透 …1. 缓存预热
预先将MySQL中的数据同步至Redis的过程
2. 缓存雪崩
Redis主机出现故障或有大量的key同时过期大面积失效导致Redis不可用
Redis中key设置为永不过期或者过期时间错开Redis缓存集群实现高可用多缓存结合预防雪崩服务降级
3. 缓存穿透
每次请求数据Redis上都没有导致MySQL压力增大此时Redis形同摆设
空对象缓存或者缺省值 回写增强 如果发生了缓存穿透我们可以针对要查询的数据在Redis里存一个和业务部门商量后确定的缺省值(比如零、负数、defaultNull等)。 比如键uid:abcdxxx值defaultNull作为案例的key和value 先去redis查键uid:abcdxxx没有再去mysql查没有获得 这就发生了一次穿透现象。 but可以增强回写机制 mysql也查不到的话也让redis存入刚刚查不到的key并保护mysql。 第一次来查询uid:abcdxxxredis和mysql都没有返回null给调用者但是增强回写后第二次来查uid:abcdxxx此时redis就有值了。 可以直接从Redis中读取default缺省值返回给业务应用程序避免了把大量请求发送给mysql处理打爆mysql。 但是此方法架不住黑客的恶意攻击有缺陷......只能解决key相同的情况 黑客会对你的系统进行攻击拿一个不存在的id去查询数据会产生大量的请求到数据库去查询。可能会导致你的数据库由于压力过大而宕掉。 key相同 第一次打到mysql 空对象缓存后第二次就返回defaultNull缺省值, 遥免mysql被攻击不用再到数据库中去走一圈了 key不同 由于存在空对象缓存和缓存回写(看自己业务不限死) redis中的无关紧要的key也会越写越多(记得设置redis过期时间) 布隆过滤器 Guava布隆过滤器 !--guava Google 开源的 Guava 中自带的布隆过滤器--
dependencygroupIdcom.google.guava/groupIdartifactIdguava/artifactIdversion23.0/version
/dependency package com.example.redis;import com.google.common.hash.BloomFilter;
import com.google.common.hash.Funnels;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;SpringBootTest
public class GuavaBloomFilterTest {Testpublic void test() {// 创建一个布隆过滤器 过滤整数值预计插入元素为100BloomFilterInteger bloomFilter BloomFilter.create(Funnels.integerFunnel(), 100);// 判断指定元素是否存在boolean contain bloomFilter.mightContain(1);System.out.println(contain);// 将元素新增入布隆过滤器bloomFilter.put(1);contain bloomFilter.mightContain(1);System.out.println(contain);}
}4. 缓存击穿
大量请求同时查询一个key时该key刚好失效导致大量请求打到数据库上热点key失效
差异失效时间或者不设置失效时间互斥更新采用双检加锁策略