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

响应式网站建设的好处网络设计报告总结

响应式网站建设的好处,网络设计报告总结,搭建论坛需要多少钱,企业解决方案ppt目录 一、缓存雪崩 1.1 解决缓存雪崩问题 二、缓存穿透 2.1 解决缓存穿透 三、缓存击穿 3.1 解决缓存击穿 3.2 如何保证数据一致性问题#xff1f; 一、缓存雪崩 缓存雪崩是指短时间内#xff0c;有大量缓存同时过期#xff0c;导致大量的请求直接查询数据库#xf…目录 一、缓存雪崩 1.1 解决缓存雪崩问题 二、缓存穿透 2.1 解决缓存穿透 三、缓存击穿 3.1 解决缓存击穿 3.2 如何保证数据一致性问题 一、缓存雪崩 缓存雪崩是指短时间内有大量缓存同时过期导致大量的请求直接查询数据库从而对数据库造成了巨大的压力严重情况下可能会导致数据库宕机的情况叫做缓存雪崩。 我们先来看下正常情况下和缓存雪崩时程序的执行流程图正常情况下系统的执行流程如下图所示 缓存雪崩的执行流程如下 从以上图片我们可以发现1导致缓存雪崩的主要原因有以下三个 缓存过期时间设置不合理 由于大量缓存数据设置的过期时间相同导致在某一时刻缓存大量失效这样就使大量请求直接打到数据库上。提供缓存的服务器发生障碍缓存的服务器出现故障无法提供缓存服务那么所有请求就会直接访问数据库。缓存数据的热点分布不均由于是大量缓存直击数据库所以可能是热点数据分布不均匀都集中到某个缓存节点上当这些节点发生故障或者数据失效的时候会导致请求直接打到数据库。 1.1 解决缓存雪崩问题 ① 随机生成缓存过期时间 可以避免缓存同时过期 package org.example;import redis.clients.jedis.Jedis;import java.util.Random;public class Main {public static void main(String[] args) {// 连接到本地 Redis 服务Jedis jedis new Jedis(localhost, 6379);//缓存原来的失效时间int exTime 10 * 60;//随机数生成Random randow new Random();jedis.setex(myKey, exTime randow.nextInt(1000), Hello, Redis!);// 关闭连接jedis.close();} } ② 使用多级缓存成本高但是也较为主流 二级缓存指的是除了Redis缓存之外再设计一个二级缓存这个二级缓存的过期时间比Redsi中要大一点当Redis是失效后先查二级缓存如果查到数据了就会直接从二级缓存拿数据返回给前端。不会走数据库毕竟数据库的资源很宝贵。 这里的本地缓存可以是mybatis的二级缓存后两者更为主流因为mybatis的二级缓存可以存的东西太少了或者是Google的Guava CacheCaffeine等。 但是设计二级缓存需要多写很多代码而且会增加系统的复杂性。虽然查询的时候走二级缓存没有问题但是应用程序执行写入操作的时候那么原本只需要保证Redis里的数据库和数据库里的数据一致即可但是现在还要保证二级缓存的一致性数据的一致性更难保证了。 但是Caffeine有方案可以保证本地缓存一致性的问题。 ③ 缓存过期前预加载: 在缓存即将过期之前提前异步加载缓存避免在缓存失效时大量请求直接打到数据库或者后端服务。 例如看门狗机制但是实现起来并不简单因为还需要设置定时任务之类但是定时任务也有可能会挂并且也是有一定开销。 ④ 开启限流或降级功能: 当缓存发生雪崩时采用限流或降级的机制来减少服务器的压力保证系统的可用性。 ⑤ 实时监控和预警: 通过监控缓存的状态和命中率及时发现缓存问题预警系统管理员或运维人员。 二、缓存穿透 缓存穿透是指查询数据库和缓存都无数据因为数据库查询无数据出于容错考虑不会将结果保存到缓存中因此每次请求都会去查询数据库从而给数据库带来了额外的压力降低了系统性能的情况就叫做缓存穿透。 也就是说缓存穿透是因为数据库查询无数据出于容错考虑不会将结果保存到缓存中因此每次请求都会去查询数据库这种情况就叫做缓存穿透。 缓存穿透 执行流程如下图所示 缓存穿透执行流程Redis 和 数据库 都被穿透。 2.1 解决缓存穿透 缓存穿透的常见解决方案有以下几个 1.缓存空对象: 对于查询结果为 nul 或不存在的数据也可以将它们以特殊值(如NULL、特定标识符)进行缓存并设置较短的过期时间。这样短时间内相同的查询请求就可以直接从缓存中获得响应避免了对数据库的直接查询。 2. 布隆过滤器(Bloom Filter): 在请求到达缓存之前先通过布降过滤器判断数据可能存在还是一定不存在。对于确定不存在的数据可以直接返回;可能存在则继续査询缓存和数据库。布隆过滤器是一种空间效率极高的概率型数据结构它会给出“可能存在“或“肯定不存在”的答案。 3. 开启限流功能当发现大量连接未命中的请求时可以采用限流策略限制同一时间段内向数据库发送的查询请求数量减轻数据库压力。 2.2 什么是布隆过滤器  布隆过滤器是一种空间效率极高的概率性数据结构可以用于判断一个元素是否在一个集合中。 它基于位数组和多个哈希函数的原理可以高效地进行元素的查询并且占用的空间相对较小 如下图所示: 这里面存的就是比特即0或1。根据 key 值计算出它的存储位置然后将此位置标识全部标识为 1(未存放数据的位置全部为 0)查询时也是查询对应的位置是否全部为 1如果全部为 1则说明数据是可能存在的否则一定不存在. 这种采用存储三个比特的方法可以有效避免hash冲突因为如果只存储一个的话hash冲突可能发生比较频繁。 也就是说如果布隆过滤器说一个元素不在集合中那么它一定不在这个集合中;但如果它说一个元素在集合中则有可能是不存在的(存在误差)。  执行过程 布隆过滤器的具体执行步骤如下: 在 Redis 中创建一个位数组用于存储布降过滤器的位向量每个位置的值设置为 0.添加元素到布隆过滤器时对元素进行多次哈希计算并将对应的位数组位置设置为 1。查询元素是否存在时对元素进行多次哈希计算并检查对应的位数组位置是否都为 1都为1 表示可能存在其中有一个为 0则一定不存在。 使用场景 布隆过滤器的主要使用场景有以下几个: 大数据量去重:可以用布降过滤器来进行数据去重判断一个数据是否已经存在避免重复插入。防止缓存穿透:可以用布隆过滤器来过滤掉恶意请求或请求不存在的数据避免对后端存储的频繁访问。网络爬虫 URL 去重:可以用布降过滤器来判断 URL 是否已经被爬取避免重复爬取。 布隆过滤器会不会比较耗内存添加数据怎么办删除数据怎么办 布隆过滤器是一种用于快速判断一个元素是否存在于集合中的数据结构它的优点是查询效率高且占用内存较少。然而布隆过滤器也存在一些限制和操作上的考虑。 内存消耗布隆过滤器的内存消耗主要取决于预期的误判率和要存储的元素数量。误判率越低所需的内存空间就越大。一般情况下布隆过滤器的内存消耗相对较小但随着元素数量的增加内存占用也会逐渐增加。添加数据向布隆过滤器添加数据时需要对元素进行哈希计算并将对应的位标记为1。如果哈希冲突较多可能会导致位的重复标记进而影响误判率。在添加数据时可以适当调整布隆过滤器的容量和哈希函数的数量以平衡误判率和内存消耗。删除数据布隆过滤器本身不支持直接删除已添加的元素因为删除一个元素可能会影响其他元素的判断结果。如果需要删除元素一种常见的做法是使用计数器或其他数据结构辅助记录元素的添加次数然后在判断元素是否存在时根据计数器的值进行判断。当计数器为0时可以认为元素不存在。 需要注意的是布隆过滤器在判断元素是否存在时可能存在一定的误判率。因此在使用布隆过滤器时需要根据具体的应用场景和需求来选择合适的误判率和内存消耗。 三、缓存击穿 缓存击穿指的是某个热点缓存在某一时刻恰好失效了然后此时刚好有大量的并发请求此时这些请求将会给数据库造成巨大的压力这种情况就叫做缓存击穿。缓存击穿的执行流程如下图所示: 主要原因是 热点数据再缓存中失效或淘汰并发请求同时访问该数据库导致缓存无法命中。 缓存击穿的执行流程Redis 被击穿 3.1 解决缓存击穿 ① 设置永不过期: 对于某些热点缓存我们可以设置永不过期这样就能保证缓存的稳定性但需要注意在数据更改之后要及时更新此热点缓存不然就会造成查询结果的误差。 ② 缓存过期前预加载 在缓存即将过期之前提前异步加载缓存避免在缓存失效时大量请求直接打到数据库或者后端服务。 例如看门狗机制但是实现起来并不简单因为还需要设置定时任务之类但是定时任务也有可能会挂并且也是有一定开销。 ③ 使用多级缓存: 可以使用多级缓存架构将热门数据同时缓存在多个缓存节点上避免单一节点故障导致请求直接访问数据库或者后端服务例如可以设计多级缓存也就是使用分布式缓存(Redis)本地缓存(Caffeine/Guava Cache)如下图所示 但是设计二级缓存需要多写很多代码而且会增加系统的复杂性。虽然查询的时候走二级缓存没有问题但是应用程序执行写入操作的时候那么原本只需要保证Redis里的数据库和数据库里的数据一致即可但是现在还要保证二级缓存的一致性数据的一致性更难保证了。 但是Caffeine有方案可以保证本地缓存一致性的问题。 ④ 开启限流或降级功能 当缓存发送雪崩时采用限流或降级的机制来减少服务器的压力保证系统的可用性。 3.2 如何保证数据一致性问题 如何保证本地缓存的一致性? 在分布式系统中使用本地缓存最大的问题就是一致性问题所谓的一致性问题指的是当数据库发生数据变更时缓存也要跟着一起变更。而分布式系统中每台机器都有自己的本地缓存所以想要保证(本地缓存的)一致性是个比较难的问题但通过以下手段可以最大程度的保证本地缓存的一致性问题: 本地缓存失效时间尽量短短的存活周期保证了尽可能的保证了一致性。通过微服务中的配置中心(例如 Nacos)来协调因为所有服务器都连接的配置中心所以当数据修改之后可以给配置中心推送一个配置修改的信息然后配置中心再把变更信息推送给各个服务服务订阅到配置变更消息之后就会更新自己的本地缓存这样就实现了数据的一致性。使用缓存框架的自动更新功能例如 Caffeine 中的 refresh 功能自动刷新缓存。 不同的业务系统会采用不同的解决方案例如以下这些场景和对应的解决方案 如果对数据一致性要求不是很高并且程序的并发压力不大的情况下可能使用方案 1也就是设置本地缓存短时间内失效的解决方案因为它的实现最简单。如果对数据的一致性要求极高且有配置中心的情况下可使用配置中心协调和同步本地缓存。相反如果对一致性要求没有那么高且为高并发的系统那么可以采用本地缓存的自动更新功能来实现。
http://www.zqtcl.cn/news/227953/

相关文章:

  • wordpress 文章延时加载seo软件系统
  • 网站建设与运营答案新浪网站首页
  • 网站怎么做关键词库如何建免费的企业网站
  • 跟老外做网站网络系统管理与维护机考
  • 网站推广方案范例江西南昌小程序开发
  • 烘焙类网站开发时代背景ppt素材模板免费下载
  • 如何制作多网页网站广州品牌seo推广
  • 域名怎么解析到网站什么是asp网站
  • 网站开发的税率做网站文案
  • 网站模板上传工具如何介绍自己设计的网页
  • 河北网站建设价格低国内做外单的网站有哪些
  • wordpress Apache升级优化营商环境的意义
  • 单页式网站系统wordpress自定义字段怎么用
  • 南宁网站设计要多少钱修改wordpress中的 功能 小工具
  • 南昌高端网站开发费用表域名价格排行
  • 怎么接网站开发外包中国观鸟记录的网站架构
  • 青海省住房和城乡建设厅的官方网站网站举报能不能查到举报人
  • dw做的网站如何上传云服务器网址生成app一键生成器
  • 山西建设厅网站密钥房山营销型网站建设
  • 网站空间多少钱哪里接单做网站
  • 建设部网站资质人员查询页面设计的对称方法包括哪几种形式
  • 滁州网站建设哪个好点iis发布网站无法访问
  • 网站项目建设的定义百度站长平台清退
  • ip开源网站FPGA可以做点什么建设网站的工作职责
  • 重庆微信网站开发公司建设网站技术标准
  • 网站开发浏览器银川市建设诚信平台网站
  • 找合伙人做红木家具网站建设银行员工学习网站
  • iis的默认网站没有自动启动长春小程序开发制作
  • 佛山住房和城乡建设部网站wordpress 英文主题
  • 零食网站策划书厦门建设网站的公司