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

深圳中国网站制作哪家公司好商城网站建设需要什么团队

深圳中国网站制作哪家公司好,商城网站建设需要什么团队,详情页设计,服务器租用服务目录 一、缓存介绍 二、经典三缓存问题 1. 缓存穿透 1.1. 简介 1.2. 解决方案 1.3. 总结 2. 缓存雪崩 2.1. 简介 2.2. 解决方案 2.3. 总结 3. 缓存击穿 3.1. 简介 3.2. 解决方案 3.3. 总结 4. 经典三缓存问题出现的根本原因 三、常见双缓存方案 1. 缓存预热 1…目录 一、缓存介绍 二、经典三缓存问题 1. 缓存穿透 1.1. 简介 1.2. 解决方案 1.3. 总结 2. 缓存雪崩 2.1. 简介 2.2. 解决方案 2.3. 总结 3. 缓存击穿 3.1. 简介 3.2. 解决方案 3.3. 总结 4. 经典三缓存问题出现的根本原因 三、常见双缓存方案 1. 缓存预热 1.1. 简介 1.2. 作用和目的 2. 缓存清除 2.1. 什么是缓存清除 2.2. 缓存清除的作用和目的 3. 代码示例 4. 知识小结 一、缓存介绍 缓存是一种数据存储技术用于存储经常访问的数据以便在需要时快速获取。通过缓存数据可以减少 数据的访问时间和系统的负载从而提高应用程序的性能。缓存可以应用在多个层次例如CPU缓存、数 据库缓存和Web缓存。 二、经典三缓存问题 1. 缓存穿透 1.1. 简介 缓存穿透是指用户查询数据在数据库没有自然在缓存中也不会有。 这样就导致用户查询的时候在缓存中找不到每次都要去数据库再查询一遍然后返回空 相当于进行了两次无用的查询 这样请求就绕过缓存直接查数据库这也是经常提的缓存命中率问题。 1.2. 解决方案 解决方案 对空值进行缓存 类似于上面的例子虽然数据库中没有id-9527的用户的数据但是在redis中对他进行缓存key-9527valuenull这样当请求到达redis的时候就会直接返回一个null的值给客户端避免了大量无法访问的数据直接打在DB上。实时监控 对redis进行实时监控当发现redis中的命中率下降的时候进行原因的排查配合运维人员对访问对象和访问数据进行分析查询从而进行黑名单的设置限制服务。使用布隆过滤器 使用BitMap作为布隆过滤器将目前所有可以访问到的资源通过简单的映射关系放入到布隆过滤器中哈希计算当一个请求来临的时候先进行布隆过滤器的判断如果有那么才进行放行否则就直接拦截。接口校验 类似于用户权限的拦截对于id-3872这些无效访问就直接拦截不允许这些请求到达Redis、DB上。 1.3. 总结 举例客户端发送大量的不可响应的请求如下图 根本原因结合上文就是请求根本不存在的资源 当大量的客户端发出类似于https://localhost: 9090/user/18933?id-9527的请求就可能导致出现 缓存穿透的情况。 因为数据库DB中本身就没有id-9527的用户的数据所以Redis也没有对应的数据那么这些请求在redis 就得不到响应就会直接打在DB上导致DB压力过大而卡死情景在线或宕机 2. 缓存雪崩 2.1. 简介 我们可以简单的理解为由于原有缓存失效新缓存未到时间(例如我们设置缓存时采用了相同的过期时 间在同一时刻出现大面积的缓存过期)所有原本应该访问缓存的请求都去查询数据库了而对数据库 CPU和内存造成巨大压力严重的会造成数据库宕机。从而形成一系列连锁反应造成整个系统崩溃。 2.2. 解决方案 解决方案 将失效时间分散开 通过使用自动生成随机数使得key的过期时间是随机的防止集体过期使用多级架构 使用nginx缓存redis缓存其他缓存不同层使用不同的缓存可靠性更强设置缓存标记 记录缓存数据是否过期如果过期会触发通知另外的线程在后台去更新实际的key使用锁或者队列的方式 如果查不到就加上排它锁其他请求只能进行等待 2.3. 总结 产生的原因redis中大量的key集体过期 比如当redis中的大量key集体过期可以理解为redis中的大部分数据都被清空了失效了那么这时 候如果有大量并发的请求来到那么redis就无法进行有效的响应命中率急剧下降请求就都打到DB上 了到时DB直接崩溃。 3. 缓存击穿 3.1. 简介 某个 key 非常非常热访问非常的频繁高并发访问的情况下当这个 key在失效可能expire过期了 也可能LRU淘汰了的瞬间大量的请求进来这时候就击穿了缓存直接请求到了数据库一下子来这 么多数据库肯定受不了这就叫缓存击穿。某个key突然失效然后这时候高并发来访问这个key结果 缓存里没有都跑到db了。和缓存雪崩不同的是缓存击穿指并发查同一条数据缓存雪崩是不同数据都 过期了很多数据都查不到从而查数据库。 3.2. 解决方案 解决方案 提前对热点数据进行设置 类似于新闻、某博等软件都需要对热点数据进行预先设置在redis中监控数据适时调整 监控哪些数据是热门数据实时的调整key的过期时长使用锁机制 只有一个请求可以获取到互斥锁然后到DB中将数据查询并返回到Redis之后所有请求就可以从Redis中得到响应 3.3. 总结 产生的原因redis中的某个热点key过期但是此时有大量的用户访问该过期key。 比如类似于“某明星出轨事件”上了热搜这时候大量的“粉丝”都在访问该热点事件但是可能由于某种原 因redis的这个热点key过期了那么这时候大量高并发对于该key的请求就得不到redis的响应那么就会将请求 直接打在DB服务器上导致整个DB瘫痪。 4. 经典三缓存问题出现的根本原因 三者出现的根本原因是Redis缓存命中率下降请求直接打到DB上了 正常情况下大量的资源请求都会被redis响应在redis得不到响应的小部分请求才会去请求DB这样DB 的压力是非常小的是可以正常工作的 如果大量的请求在redis上得不到响应那么就会导致这些请求会直接去访问DB导致DB的压力瞬间变大 而卡死或者宕机。 大量的高并发的请求打在redis上 这些请求发现redis上并没有需要请求的资源redis命中率降低 因此这些大量的高并发请求转向DB数据库服务器请求对应的资源 DB压力瞬间增大直接将DB打垮进而引发一系列“灾害” 三、常见双缓存方案 1. 缓存预热 1.1. 简介 缓存预热是一种在应用程序启动或缓存失效之后主动将热点数据加载到缓存中的策略。 这样在实际请求到达应用程序时热点数据已经存在于缓存中从而减少了缓存未命中的情况提高了 应用程序的响应速度。 1.2. 作用和目的 缓存预热的主要作用和目的如下 提高缓存命中率通过预先加载热点数据缓存预热可以提高缓存的命中率从而减少对后端数据源如数据库的访问降低系统的负载。保持应用程序性能稳定在应用程序启动或缓存失效之后缓存预热可以防止请求对后端数据源产生突然的压力从而保持应用程序的性能稳定。优化用户体验由于热点数据已经存在于缓存中用户在请求这些数据时能获得更快的响应速度从而提高用户体验。 2. 缓存清除 2.1. 什么是缓存清除 缓存清除是一种策略用于在数据发生变化时删除或更新缓存中的相关数据以确保缓存中的数据与数据 源保持一致。缓存清除可以是手动触发的也可以是自动触发的例如设置缓存的过期时间。 2.2. 缓存清除的作用和目的 缓存清除的主要作用和目的如下 保持数据一致性当数据发生变化时缓存清除可以确保缓存中的数据与数据源保持一致从而避免因缓存数据过期或错误而导致的应用程序错误。释放缓存空间缓存空间是有限的缓存清除可以删除不再需要的数据为新的数据访问腾出空间。提高缓存利用率通过删除过期或不常用的数据缓存清除可以确保缓存中的数据是最有价值的从而提高缓存的利用率。避免脏数据在某些情况下缓存中的数据可能因为程序错误、系统故障等原因而变得不可靠。 缓存清除可以定期或根据需要清理这些脏数据确保缓存中的数据是有效的。 3. 代码示例 我们使用Spring Boot的spring-boot-starter-cache依赖来实现缓存。 首先在pom.xml中添加以下依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-cache/artifactId /dependency 假设我们有一个表示商品的Product实体 public class Product {private Long id;private String name;private BigDecimal price;// 构造函数、getter和setter方法 } 我们创建一个ProductService类来处理Product实体的查询和更新操作 并使用Cacheable和CacheEvict注解来实现缓存预热和缓存清除。 import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service;import java.util.List;Service public class ProductService {private final ProductRepository productRepository;public ProductService(ProductRepository productRepository) {this.productRepository productRepository;}Cacheable(value products, key #id)public Product getProduct(Long id) {// 模拟数据库查询return productRepository.findById(id);}CacheEvict(value products, key #product.id)public void updateProduct(Product product) {// 模拟数据库更新productRepository.update(product);}// 缓存预热方法public void cacheWarmUp() {ListProduct products productRepository.findAll();for (Product product : products) {getProduct(product.getId());}} } 在这个示例中我们使用Cacheable注解来缓存getProduct方法的结果当获取商品时首先会在缓存 中查找如果未找到则查询数据库并将结果存储到缓存中。我们使用CacheEvict注解来清除 updateProduct方法更新的商品的缓存。cacheWarmUp方法用于缓存预热它主动加载所有商品到缓存 中。要在应用程序启动时执行缓存预热我们可以实现CommandLineRunner接口并重写run方法 import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component;Component public class CacheWarmUpRunner implements CommandLineRunner {private final ProductService productService;public CacheWarmUpRunner(ProductService productService) {this.productService productService;}Overridepublic void run(String... args) {productService.cacheWarmUp();} } 现在我们的应用程序在启动时将自动执行缓存预热加载所有商品到缓存中。 同时在更新商品时相关缓存将被清除以保持数据的一致性。 4. 知识小结 本节详细介绍了缓存预热和缓存清除的概念、原理、作用和目的。缓存预热是一种主动加载热点数据到缓 存的策略旨在提高缓存命中率、保持应用程序性能稳定和优化用户体验。而缓存清除则是在数据发生变 化时删除或更新缓存中的相关数据以保持数据一致性、释放缓存空间、提高缓存利用率和避免脏数据。
http://www.w-s-a.com/news/976633/

相关文章:

  • 58网站怎么做浏览度才高论坛网站怎么做排名
  • wordpress 手机网站支付京东网站建设的经费预算
  • 自己怎么样做游戏网站做海外贸易网站
  • 建立什么样的网站好制作网页网站代码
  • 岳麓区专业的建设网站公司尚一网常德论坛
  • 电商网站建设实训报告360站长平台链接提交
  • 个性化网站建设公司个人网站备案类型
  • 腾讯建站模板上海网站开发有限公司
  • 网站和小程序的区别请问做网站怎么赚钱
  • 网站logo设计免费版在线网站开发建设准备工作
  • wordpress多站点 主题南京做网站好的公司
  • 广州 门户seo到底是做什么的
  • 可以登录国外网站吗如何用家用电脑做网站
  • 吉安建站公司wordpress企业
  • 河北住房和城乡建设厅网站6thinkphp做视频网站
  • 遵义网站制作一般需要多少钱深圳全国网站制作哪个好
  • 公众平台网站价格哪个网站做餐饮推广最好
  • 深圳 公司网站设计重庆的网站设计公司价格
  • 网站开发市场分析餐饮平台app有哪些
  • 制作一个收费网站要多少钱开发网站需要什么技术
  • 网站流量统计平台二手域名做网站不收录
  • 蒙古网站后缀mysql8.0 wordpress
  • 免费建立一个网站互联网推广培训
  • WordPress多站点绑定域名深圳住房建设部官方网站
  • 网站建设公司zgkr上海网页网络技术有限公司
  • wordpress附件扩展格式徐州seo关键词
  • wordpress博客站模板织梦网站 联系方式修改
  • 北京城乡建设厅网站重庆网站建设解决方案
  • 网站建设和维护工作内容网站的空间与域名
  • 济南做门户网站开发公司网页发布的步骤