当前位置: 首页 > wzjs >正文

长春市城乡建设局网站注册公司注册资金要实缴吗

长春市城乡建设局网站,注册公司注册资金要实缴吗,平台投放广告怎么收费,分析网站建设缓存 --- 缓存击穿, 缓存雪崩, 缓存穿透 缓存击穿(Cache Breakdown)概念原理实际场景代码实现(互斥锁方案) 缓存雪崩(Cache Avalanche)概念原理实际场景代码实现(随机过期时间) 缓存…

缓存 --- 缓存击穿, 缓存雪崩, 缓存穿透

  • 缓存击穿(Cache Breakdown)
    • 概念原理
    • 实际场景
    • 代码实现(互斥锁方案)
  • 缓存雪崩(Cache Avalanche)
    • 概念原理
    • 实际场景
    • 代码实现(随机过期时间)
  • 缓存穿透(Cache Penetration)
    • 概念原理
    • 实际场景
    • 代码实现(布隆过滤器 + 空值缓存)
  • 总结对比

缓存击穿(Cache Breakdown)

概念原理

  • 定义:某个 热点数据(高频访问的 Key) 在缓存中过期时,瞬间有大量并发请求涌入,直接穿透缓存访问数据库,导致数据库压力骤增。
  • 核心原因:高并发场景下,热点数据缓存失效的瞬间,请求集中访问数据库。
  • 本质问题:缓存失效时间的集中性与高并发请求的瞬时性冲突。

实际场景

  • 电商秒杀:某商品参与限时秒杀活动,缓存设置为 10 分钟过期。活动开始后缓存突然失效,瞬间数万请求直接访问数据库查询库存。

代码实现(互斥锁方案)

public String getProduct(String productId) {String cacheKey = "product:" + productId;// 1. 从缓存获取数据String product = redisTemplate.opsForValue().get(cacheKey);if (product != null) {return product;}// 2. 缓存未命中,尝试获取分布式锁String lockKey = "lock:product:" + productId;boolean locked = redisTemplate.opsForValue().setIfAbsent(lockKey, "locked", 30, TimeUnit.SECONDS);try {if (locked) {// 3. 获取锁成功,查询数据库product = productService.getById(productId);// 4. 回写缓存并设置过期时间redisTemplate.opsForValue().set(cacheKey, product, 1, TimeUnit.HOURS);} else {// 5. 未获取锁,等待后重试(避免循环等待需设置最大重试次数)Thread.sleep(100);return getProduct(productId); // 递归重试}} finally {// 6. 释放锁if (locked) {redisTemplate.delete(lockKey);}}return product;
}

关键点

  • 使用 setIfAbsent 实现分布式锁,避免多个线程同时重建缓存。
  • 锁需设置超时时间(如 30 秒),防止死锁。
  • 未获取锁的线程需等待后重试(或返回默认值)。

缓存雪崩(Cache Avalanche)

概念原理

  • 定义:大量缓存数据 在同一时间过期,导致所有请求直接访问数据库,引发数据库崩溃。
  • 核心原因:缓存过期时间设置过于集中。
  • 本质问题:缓存失效的“雪崩效应”导致数据库瞬时压力过大。

实际场景

  • 电商大促:所有商品缓存设置为凌晨 0 点过期,导致瞬时大量商品详情查询请求直接压垮数据库。

代码实现(随机过期时间)

public void setProductCache(String productId, Product product) {String cacheKey = "product:" + productId;// 基础过期时间 + 随机偏移量(0~300秒)int baseExpire = 3600; // 1小时int randomExpire = new Random().nextInt(300); redisTemplate.opsForValue().set(cacheKey, product, baseExpire + randomExpire, TimeUnit.SECONDS);
}// 查询时统一使用随机过期时间
public Product getProduct(String productId) {String cacheKey = "product:" + productId;Product product = redisTemplate.opsForValue().get(cacheKey);if (product == null) {product = productService.getById(productId);setProductCache(productId, product); // 设置缓存时添加随机过期时间}return product;
}

关键点

  • 在基础过期时间上添加随机偏移量(如 0~300 秒),分散缓存过期时间。
  • 结合 Redis 集群部署,提升缓存层的高可用性。

缓存穿透(Cache Penetration)

概念原理

  • 定义:大量请求查询 数据库中不存在的数据,缓存无法命中,导致请求直接穿透到数据库。
  • 核心原因:恶意攻击或业务逻辑漏洞(如查询无效 ID)。
  • 本质问题:缓存层和数据库层均无法拦截无效请求。

实际场景

  • 恶意爬虫攻击:攻击者批量请求 -10 或超大数值的用户 ID,绕过缓存直接查询数据库。

代码实现(布隆过滤器 + 空值缓存)

// 使用 Guava 布隆过滤器(初始化时预热合法ID)
private BloomFilter<String> bloomFilter = BloomFilter.create(Funnels.stringFunnel(StandardCharsets.UTF_8), 1000000, 0.01
);public User getUser(String userId) {// 1. 布隆过滤器拦截非法请求if (!bloomFilter.mightContain(userId)) {return null;}String cacheKey = "user:" + userId;User user = redisTemplate.opsForValue().get(cacheKey);if (user != null) {return "NULL".equals(user) ? null : user;}// 2. 查询数据库user = userService.getById(userId);if (user == null) {// 3. 缓存空值(防止反复穿透)redisTemplate.opsForValue().set(cacheKey, "NULL", 5, TimeUnit.MINUTES);return null;}// 4. 回写缓存redisTemplate.opsForValue().set(cacheKey, user, 1, TimeUnit.HOURS);return user;
}

关键点

  • 布隆过滤器初始化时需预热合法 ID(如从数据库加载)。
  • 缓存空值(如 "NULL")并设置短过期时间(如 5 分钟)。
  • 布隆过滤器存在误判率(可配置 0.01),但不会漏判。

总结对比

问题类型触发条件解决方案核心实现技术
击穿热点Key过期 + 高并发互斥锁、逻辑过期分布式锁(SETNX)、异步重建
穿透查询不存在的数据布隆过滤器、空值缓存Bloom Filter、NULL占位
雪崩大量Key同时过期随机过期时间、集群容灾过期时间随机化、Redis集群

注意事项

  1. 布隆过滤器需要预热数据,适用于静态数据(如商品ID列表)。
  2. 互斥锁需设置合理的锁超时时间,避免锁过期后业务线程仍在执行。
  3. 空值缓存的过期时间不宜过长,防止内存浪费。
http://www.dtcms.com/wzjs/830073.html

相关文章:

  • 想再算命网站上登广告怎么做南山网站公司
  • 上海网站建设开发哪家专业山西省普通高考考生网上服务平台
  • 网站域名实名认证查询软件下载免费大全网站
  • 上海网站备案信息高性能网站建设进阶
  • 网站的规划与建设_按时间顺序可以分为哪几个阶段?张掖市建设规划局网站
  • 消费者联盟网站怎么做wordpress 多个分类查找
  • 网站建设最好的浙江省信息港成绩查询
  • 长沙市建设厅网站青岛做网站哪家优化好
  • 网站开发排行企业建设网站的目的是
  • 南宁新技术产业建设开发总公司网站门户网站建设工具
  • 做网站怎么做手机网站菜单栏怎么做
  • 住房和城乡建设部官网证件查询注册南京网站优化方案
  • 成都世迅网站建设三维角色动画制作工具
  • 北京商城网站建设报价孩子学编程网上课程哪家好
  • 企业网站免费建站监察部门网站建设方案
  • 注册公司网站怎么做网站快速收录技术
  • 厦门外贸商城网站建设arukas wordpress
  • 网站开发的英文书有什么软件晨阳seo服务
  • 页面好看的教育类网站模板下载个人免费网站创建入口
  • 天津网站建设要多少钱手机网站底部导航代码
  • 中小网站建设建站展示
  • 中山 环保 骏域网站建设专家代运营公司介绍
  • 网站开发工具总结微信商城开发报价
  • 排版漂亮的网站苏州加基森网站建设
  • 如何提高网站点击率手机版的网站怎么做
  • wordpress做旅游网站论文网站建设格式
  • wordpress学习长沙网站seo
  • 网站备案 2016简单个人网站开发代码
  • 免费公司网站建设建设工程竣工验收消防备案网站
  • 网站开发报价一家做公司评估的网站