中国网站制作公司建设通是什么

张小明 2025/12/29 14:51:18
中国网站制作公司,建设通是什么,新风向网站建设,手机网站制作的价格在使用 Redis 作为缓存层时#xff0c;我们经常会遇到三个经典问题#xff1a;缓存击穿、缓存穿透和缓存雪崩。这些问题可能导致系统性能下降甚至崩溃#xff0c;本文将详细介绍这三个问题的原因和解决方案。一、#x1f3af; 缓存击穿问题描述#xff1a;某个热点 key 在…在使用 Redis 作为缓存层时我们经常会遇到三个经典问题缓存击穿、缓存穿透和缓存雪崩。这些问题可能导致系统性能下降甚至崩溃本文将详细介绍这三个问题的原因和解决方案。一、 缓存击穿问题描述某个热点 key 在缓存中过期的瞬间大量请求同时访问数据库造成数据库压力骤增。解决方案1.1 设置热点永不过期案例代码// 对于热点数据可以不设置过期时间 redisTemplate.opsForValue().set(hot_data, data);1.2 互斥锁机制使用互斥锁防止多个线程同时访问数据库。案例代码public String getDataWithMutex(String key) { String value redisTemplate.opsForValue().get(key); if (value null) { // 获取分布式锁 Boolean lock redisTemplate.opsForValue() .setIfAbsent(lock: key, 1, Duration.ofSeconds(10)); if (lock) { try { // 查询数据库 value queryFromDatabase(key); // 写入缓存 redisTemplate.opsForValue().set(key, value, Duration.ofMinutes(5)); } finally { // 释放锁 redisTemplate.delete(lock: key); } } else { // 等待其他线程加载完成 Thread.sleep(100); return getDataWithMutex(key); } } return value; }1.3 接口限流与熔断重要接口设置限流策略防止恶意刷接口同时进行熔断处理二、 缓存穿透问题描述查询一个不存在的数据缓存和数据库都查不到每次请求都会打到数据库浪费系统资源。解决方案2.1 接口层增加校验如用户鉴权校验id做基础校验id0的直接拦截2.2 缓存空值对于缓存和数据库中都没有的数据将key-value对写为key-null设置短期有效时间代码如下public String getDataWithNullCache(String key) { String value redisTemplate.opsForValue().get(key); if (value null) { // 查询数据库 value queryFromDatabase(key); if (value null) { // 缓存空值设置较短过期时间 redisTemplate.opsForValue().set(key, , Duration.ofMinutes(1)); return null; } else { // 缓存真实数据 redisTemplate.opsForValue().set(key, value, Duration.ofMinutes(10)); } } else if (value.isEmpty()) { // 缓存的空值 return null; } return value; }2.3 布隆过滤器使用布隆过滤器快速判断数据是否存在于缓存中避免频繁访问数据库。什么是布隆过滤器------------布隆过滤器Bloom Filter是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多缺点是有一定的误识别率和删除困难。以Redis中的布隆过滤器实现为例Redis中的布隆过滤器底层是一个大型位数组二进制数组多个无偏hash函数。在布隆过滤器增加元素之前首先需要初始化布隆过滤器的空间也就是上面说的二进制数组除此之外还需要计算无偏hash函数的个数。隆过滤器提供了两个参数分别是预计加入元素的大小n运行的错误率f。布隆过滤器中有算法根据这两个参数会计算出二进制数组的大小l以及无偏hash函数的个数k。布隆过滤器支持增加和查询不支持删除和修改。 关系就是错误率越低位数组越长控件占用较大错误率越低无偏hash函数越多计算耗时较长案例代码Component public class BloomFilterService { private final RedisTemplateString, Object redisTemplate; // 添加数据到布隆过滤器 public void addToBloomFilter(String key) { redisTemplate.opsForValue().setBit(bloom:user, hash(key), true); } // 检查数据是否存在 public boolean mightContain(String key) { long hash1 hash(key); long hash2 hash2(key); for (int i 0; i 3; i) { long combinedHash hash1 i * hash2; if (!redisTemplate.opsForValue().getBit(bloom:user, combinedHash)) { return false; } } return true; } private long hash(String key) { return key.hashCode() Integer.MAX_VALUE; } private long hash2(String key) { return (key.hashCode() 16) Integer.MAX_VALUE; } }布隆过滤器的其他典型应用网页URL去重爬虫系统中判断网页是否已抓取垃圾邮件过滤判断邮件地址是否为垃圾邮件发送者数据库查询优化避免查询不存在的数据记录推荐系统过滤用户已看过的内容三、❄️ 缓存雪崩问题描述大量缓存 key 在同一时间过期导致大量请求直接打到数据库造成数据库瞬时压力过大。解决方案3.1 过期时间随机化避免大量数据同时过期public void setCacheWithRandomExpire(String key, Object value) { // 基础过期时间 随机时间 int baseExpire 300; // 5分钟 int randomExpire new Random().nextInt(600); // 0-10分钟随机 redisTemplate.opsForValue().set( key, value, Duration.ofSeconds(baseExpire randomExpire) ); }3.2 构建高可靠集群通过主从节点方式构建Redis缓存高可靠集群避免单点故障。3.3 服务降级与限流在缓存雪崩发生时启动请求限流机制减少数据库压力Component public class CacheProtectionAspect { private final RateLimiter rateLimiter RateLimiter.create(1000); // 限流1000QPS Around(annotation(com.example.annotation.CacheProtected)) public Object protectCacheAccess(ProceedingJoinPoint joinPoint) throws Throwable { if (!rateLimiter.tryAcquire()) { // 限流触发返回默认值或抛出异常 throw new RuntimeException(系统繁忙请稍后重试); } try { return joinPoint.proceed(); } catch (Exception e) { // 降级处理 return getDefaultFallbackValue(); } } private Object getDefaultFallbackValue() { // 返回默认值或从备用数据源获取 return default_value; } }总结缓存击穿、穿透和雪崩的区别可从下图看出redis缓存击穿、穿透、雪崩的了解就到这里了这部分内容在软考中也可能会被考到。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站平台建设经费预算哪个推广平台效果好

FaceFusion 实时换脸延迟实测:30ms 能做到多流畅?在直播带货中变身虚拟偶像,远程会议里用数字分身出镜,甚至让经典电影角色“复活”参与互动——这些曾经只存在于科幻中的场景,正随着实时人脸替换技术的成熟逐渐走进现…

张小明 2025/12/28 15:19:21 网站建设

青岛网站建设公司正东莞网站建设排名

Next.js配置文件next.config.js深度解析与实战指南 【免费下载链接】next.js The React Framework 项目地址: https://gitcode.com/GitHub_Trending/next/next.js Next.js作为现代React框架,其配置文件next.config.js是连接框架能力与业务需求的重要桥梁。本…

张小明 2025/12/29 6:27:47 网站建设

全网营销建设网站自己接单赚钱app

​ 然然管理系统仓库地址 https://gitee.com/OceanCore/ranran.git https://github.com/qiaoting/ranran.git 本系统旨在通过简洁实用的方式整合最新技术栈,便于开发、调试与交付。希望它能为你的学习和开发工作带来帮助与借鉴。 对于希望自己从零快速搭建项目框架的…

张小明 2025/12/25 21:08:12 网站建设

网站建设招标 报告宁波网页设计多少钱

B站视频下载完全指南:新手必备的简单三步教程 【免费下载链接】BiliDownloader BiliDownloader是一款界面精简,操作简单且高速下载的b站下载器 项目地址: https://gitcode.com/gh_mirrors/bi/BiliDownloader 还在为无法保存B站视频而烦恼吗&#…

张小明 2025/12/25 21:07:39 网站建设

眼科医院网站设计怎么做6开发app和微网站有哪些

OpenCore Legacy Patcher:解锁旧款Mac潜能的终极解决方案 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否曾因苹果官方的硬件限制而无法升级到最新的mac…

张小明 2025/12/25 21:07:07 网站建设

银行网站模板免费下载免费域名和空间申请

深入解析Windows命令行调查的影响与应对策略 1. 引言 在当今数字化时代,网络犯罪活动正以惊人的速度不断扩张。我们必须紧跟这些事件的发展步伐,及时做出有效的响应。就像TrendMicro在2014年安全总结报告中指出的那样,“2014年是大规模数据泄露、难以修复的漏洞以及蓬勃发…

张小明 2025/12/25 21:06:33 网站建设