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

网站的色彩搭配外贸网站建设报价

网站的色彩搭配,外贸网站建设报价,短视频素材网站免费大推荐,仙桃城市建设投资公司网站在使用 Redis 作为缓存的系统架构中#xff0c;缓存击穿、穿透和雪崩是三个常见且可能对系统性能产生严重影响的问题。深入理解这些问题并掌握有效的应对策略对于构建稳定、高效的系统至关重要。 一、缓存击穿 #xff08;一#xff09;问题描述 缓存击穿是指一个热点 key…在使用 Redis 作为缓存的系统架构中缓存击穿、穿透和雪崩是三个常见且可能对系统性能产生严重影响的问题。深入理解这些问题并掌握有效的应对策略对于构建稳定、高效的系统至关重要。 一、缓存击穿 一问题描述 缓存击穿是指一个热点 key 在缓存中突然过期而此时大量并发请求同时访问这个 key由于缓存中不存在该数据这些请求会直接穿透到数据库查询数据并且在查询到数据后重新将数据写入缓存。在高并发场景下数据库可能瞬间承受巨大的压力甚至导致数据库服务不可用。 例如在一个电商系统中某个热门商品的详情信息被缓存了。当缓存过期时恰好有大量用户同时点击查看该商品详情这些请求就会同时涌向数据库获取商品数据可能使数据库负载急剧上升。 二处理方法 设置热点数据永不过期对于一些极端热点且更新频率极低的数据可以设置其在缓存中永不过期。这样可以避免因缓存过期导致的击穿问题但需要注意数据一致性的维护当数据有更新时要及时更新缓存中的数据。使用互斥锁当缓存中不存在热点 key 时在访问数据库之前先获取一个互斥锁。只有获取到锁的线程才能去数据库查询数据并更新缓存其他线程则等待。在获取锁的线程完成数据库查询并更新缓存后释放锁其他线程再从缓存中获取数据。示例代码如下以 Java 语言使用 Redis 的 Jedis 客户端为例 java public String getValue(String key) {String value redis.get(key);if (value null) {// 获取锁if (redis.setnx(key _lock, locked) 1) {try {// 再次检查缓存防止其他线程已经更新缓存value redis.get(key);if (value null) {// 从数据库查询数据value db.query(key);// 将数据写入缓存redis.set(key, value);}} finally {// 释放锁redis.del(key _lock);}} else {// 等待一段时间后重试Thread.sleep(100);return getValue(key);}}return value; }这种方式可以有效控制并发访问数据库的数量但会增加系统的响应时间因为线程需要等待锁的获取。 二、缓存穿透 一问题描述 缓存穿透是指查询一个根本不存在的数据缓存和数据库都不会命中这样的请求每次都会穿透缓存到达数据库导致数据库压力增大。如果攻击者恶意构造大量这样的请求可能会使数据库服务崩溃。 例如在一个用户系统中攻击者故意发送大量不存在的用户 ID 查询请求这些请求都会直接访问数据库数据库不断进行无效查询操作浪费大量资源。 二处理方法 缓存空对象当查询数据库未找到数据时将空对象缓存起来并设置一个较短的过期时间。这样后续相同的查询请求就可以直接从缓存中获取空结果避免再次查询数据库。示例代码如下 java public String getValue(String key) {String value redis.get(key);if (value null) {// 从数据库查询数据value db.query(key);if (value null) {// 将空对象缓存起来设置过期时间为 60 秒redis.setex(key, 60, );} else {// 将数据写入缓存redis.set(key, value);}}return value; }但这种方法可能会导致缓存中存储大量无用的空对象数据占用缓存空间并且如果数据库中数据后续有更新可能会出现数据不一致的情况。 2. 布隆过滤器在访问缓存之前先使用布隆过滤器判断请求的数据是否可能存在于数据库中。布隆过滤器是一种基于位图的数据结构可以高效地判断一个元素是否在集合中但存在一定的误判率误判为存在但实际不存在。如果布隆过滤器判断数据可能不存在那么直接返回空结果不再查询缓存和数据库如果判断数据可能存在则继续正常的缓存查询流程。示例代码如下以 Guava 库中的布隆过滤器为例 java import com.google.common.hash.BloomFilter; import com.google.common.hash.Funnels;public class BloomFilterExample {private static final int EXPECTED_INSERTIONS 1000000;private static final double FPP 0.01;private static BloomFilterInteger bloomFilter BloomFilter.create(Funnels.integerFunnel(), EXPECTED_INSERTIONS, FPP);static {// 初始化布隆过滤器将数据库中已有的数据对应的 key 加入布隆过滤器ListInteger existingKeys db.getAllKeys();for (Integer key : existingKeys) {bloomFilter.put(key);}}public String getValue(String key) {int keyInt Integer.parseInt(key);if (!bloomFilter.mightContain(keyInt)) {return ;}String value redis.get(key);if (value null) {value db.query(key);if (value null) {redis.setex(key, 60, );} else {redis.set(key, value);}}return value;} }使用布隆过滤器可以有效减少缓存穿透的发生但需要合理设置误判率和预估数据量并且在数据库数据有新增或删除时需要及时更新布隆过滤器。 三、缓存雪崩 一问题描述 缓存雪崩是指在短时间内大量缓存中的 key 同时过期或者 Redis 服务突然不可用导致大量请求直接访问数据库数据库压力瞬间剧增可能导致数据库服务崩溃进而影响整个系统的正常运行。 例如在一个社交系统中很多用户的动态数据都被缓存了并且设置了相同的过期时间。当这些缓存同时过期时大量用户的请求就会同时涌向数据库获取动态数据使数据库不堪重负。 二处理方法 设置缓存过期时间随机化将缓存的过期时间设置为一个随机值避免大量缓存同时过期。例如可以在原本设置的过期时间基础上加上一个随机的时间偏移量使不同 key 的过期时间分布在一个时间段内。示例代码如下 java public void setValue(String key, String value) {// 原本设置的过期时间为 600 秒int baseExpireSeconds 600;// 随机生成 0 - 300 秒的偏移量int randomOffset new Random().nextInt(300);// 最终的过期时间int expireSeconds baseExpireSeconds randomOffset;redis.setex(key, expireSeconds, value); }使用缓存预热在系统启动或缓存服务重启时提前将一些热点数据加载到缓存中避免在用户请求高峰时因缓存未命中而导致大量请求穿透到数据库。可以在系统启动时编写一个数据加载脚本从数据库中查询热点数据并写入缓存。搭建高可用的 Redis 集群使用 Redis 集群可以提高 Redis 的可用性和容错性。当部分节点出现故障时集群中的其他节点可以继续提供服务减少因 Redis 服务不可用导致的雪崩影响。常见的 Redis 集群方案有主从复制、哨兵模式和 Redis Cluster 等。例如在主从复制模式下主节点负责写操作从节点负责读操作从节点会定期从主节点同步数据。当主节点故障时可以手动或自动将从节点提升为主节点继续提供服务。限流与降级在系统中引入限流和降级机制当发现缓存雪崩发生且数据库压力过大时对部分非核心业务的请求进行限流只允许一定数量的请求通过或者直接对这些非核心业务进行降级处理返回默认数据或提示信息以保护数据库和整个系统的稳定性。例如可以使用令牌桶算法或漏桶算法进行限流在代码中根据业务的重要性设置不同的限流阈值和降级策略。 综上所述缓存击穿、穿透和雪崩是 Redis 缓存使用过程中需要重点关注的问题。通过合理设置缓存过期时间、使用互斥锁、缓存空对象、布隆过滤器、缓存预热、搭建高可用集群以及限流降级等多种技术手段可以有效地预防和应对这些问题提高系统的性能、稳定性和可靠性为用户提供更好的服务体验。在实际的系统开发和运维中需要根据系统的业务特点、数据规模和并发量等因素综合运用这些策略不断优化系统架构和缓存策略。
http://www.hkea.cn/news/14494783/

相关文章:

  • 鞍山做网站专业公司wordpress营销主题
  • 网站运维公司定制公众号需要多少钱
  • 手机网站 幻灯片js软件开发技术流程图
  • 变量命名网站台州wordpress
  • 企业网站一般用什么域名城市建设网站鹤岗市
  • 桐乡市城乡规划建设局网站抖音代运营价格
  • 企业网站样式自己做网站的公司
  • 建设包包网站的目的广州安全教育平台入口登录
  • 苏州保利时光印象楼盘价格seo下拉优化
  • 网站推广策划包含哪些内容电商网站建设需求分析引言
  • 郑州金水区网站建设保定seo网络推广
  • 网站建设与维护浙江省试题二级域名申请入口
  • 兰州400电话网站建设wordpress增加底部导航栏
  • 网站建设的技巧背景图片素材
  • 搭建网站用什么框架重庆工程建设造价信息网站
  • 湘潭网络公司网站建设微信公众号怎么做的跟网站似的
  • 新河企业做网站中国铁路总公司建设管理部网站
  • 越秀网站建设设计2021年建站赚钱
  • 做html网站搜索框教程怎么看网站是不是做竞价
  • 百度搜索不到我的网站uc官方网站开发中心
  • 商机互联公司做网站怎么样dede小视频网站源码
  • 南京那些公司做网站游戏点卡平台网站开发
  • 平罗县住房和城乡建设局网站用源码做自己的网站
  • 梁山网站建设费用天猫网站设计特点
  • 公司做网站需要多少钱ui设计专业
  • 资源网站排名优化seoasp.net网站发布到虚拟主机
  • 800元五合一建站南京蓝牙app开发公司
  • 简洁企业网站源码棋牌网站建设要多少钱
  • iis如何发布asp.net网站做网站备案地点
  • 列出寻找网站关键词的几种途径图片制作的标准是什么