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

如何做自助网站怎么看网站有没有收录

如何做自助网站,怎么看网站有没有收录,外贸流程全步骤英文,wordpress书画#x1f44f;作者简介#xff1a;大家好#xff0c;我是爱发博客的嗯哼#xff0c;爱好Java的小菜鸟 #x1f525;如果感觉博主的文章还不错的话#xff0c;请#x1f44d;三连支持#x1f44d;一下博主哦 #x1f4dd;社区论坛#xff1a;希望大家能加入社区共同进步… 作者简介大家好我是爱发博客的嗯哼爱好Java的小菜鸟 如果感觉博主的文章还不错的话请三连支持一下博主哦 社区论坛希望大家能加入社区共同进步 ‍个人博客智慧笔记 系列专栏Redis 文章目录 前言一、问题前引二、缓存穿透1. 问题描述2. 问题解决2.1 缓存空数据2.2 布隆过滤器 三、缓存击穿1. 问题描述2. 问题解决2.1 设置逻辑过期2.2 设置互斥锁 四、缓存雪崩1. 问题描述2. 问题解决2.1 设置随机过期时间2.2 缓存高可用 总结结语 前言 一聊到redis必不可少的就是缓存三兄弟的问题即缓存穿透、缓存击穿和缓存雪崩这三个问题在业务场景中相对来说比较常见的也是比较基础的三种问题。那么这三种问题是如何引起的并且应该如何解决就是本章探讨的话题。 一、问题前引 大家都知道Redis一般搭配MySQL来使用来充当缓存处理一些业务数据。但为什么要Redis用来充当缓存呢不能直接使用MySQL吗 当然是可以的但是对于一些请求量大并发次数高的场景就有问题了。 MySQL是基于磁盘的请求查询速度偏慢所以就需要一个基于内存的速度快的工具来缓存这些数据Redis就应运而生了。而且当大量请求到来时只有MySQL的话有可能承受不住大量请求导致MySQL宕机此时就会影响到整个服务器所以Redis此时又充当了一个保护缓冲的作用。 二、缓存穿透 1. 问题描述 缓存穿透主要体现在穿透两个字上穿透即为穿过缓存打到数据库上。 当一个请求访问的时候此时Redis没有缓存该数据然后去数据库查询该数据也查询到说明没有该数据。 此时你或许还不以为然不就一个空数据吗多稀罕啊。 但如果该请求是恶意请求此时无数条请求同时访问缓存中没有全部都会打在数据库上刚好还是类似于 select * from table where name 李白表中有1000万条数据name字段也没有创建索引。这时候问题是不是就大了服务器稍微差一点就会直接宕机。 这时你或许该问了那该如何解决呢不要急机智的程序猿肯定有应对之法。 2. 问题解决 2.1 缓存空数据 如果此时将请求的数据缓存起来是不是就可以避免请求打到数据库了 你现在或许又要问了空数据怎么缓存呢没错就是缓存空数据。 如果请求的数据查询数据为空的话就将该数据为空值缓存到Redis中以后每次请求都直接访问Redis查询到该数据直接返回空值。这样就避免恶意请求全部打到数据库了。 2.2 布隆过滤器 不了解布隆过滤器的同学可以看这篇文章硬核 | Redis 布隆Bloom Filter过滤器原理与实战 布隆过滤器 (Bloom Filter)是由 Burton Howard Bloom 于 1970 年提出它是一种 space efficient 的概率型数据结构用于判断一个元素是否在集合中。 当布隆过滤器说某个数据存在时这个数据可能不存在当布隆过滤器说某个数据不存在时那么这个数据一定不存在。 哈希表也能用于判断元素是否在集合中但是布隆过滤器只需要哈希表的 1/8 或 1/4 的空间复杂度就能完成同样的问题。 布隆过滤器可以插入元素但不可以删除已有元素。 其中的元素越多false positive rate(误报率)越大但是 false negative (漏报)是不可能的。 布隆过滤器原理 BloomFilter 的算法是首先分配一块内存空间做 bit 数组数组的 bit 位初始值全部设为 0。 加入元素时采用 k 个相互独立的 Hash 函数计算然后将元素 Hash 映射的 K 个位置全部设置为 1。 检测 key 是否存在仍然用这 k 个 Hash 函数计算出 k 个位置如果位置全部为 1则表明 key 存在否则不存在。 如下图所示 三、缓存击穿 1. 问题描述 缓存击穿一般常见于电商场景在双十一和六一八这种大促活动中缓存中会缓存一些热点数据随时都有大量的请求访问这个数据。 当某个时刻这个数据突然过期大量请求就会集中打到MySQL数据库中。 如何解决这个问题呢 2. 问题解决 该问题导致的原因是因为该缓存数据过期了但却有大量请求访问该数据 有两条思路去解决 不让该数据过期不让大量请求访问数据库 2.1 设置逻辑过期 热点数据随时都会有变化不设置过期时间的话会导致更多问题不能因此失彼。 但可以换一个思路在数据过期时无缝衔接一个新数据在请求看来这就是没有过期时间的一个数据。 此时如果大量请求访问该数据刚好该数据缓存逻辑过期但没有设置物理过期时间所以数据并不会被redis清除。 此时由业务代码去判断该缓存是否过期如果过期则获取互斥锁新建一个子线程去访问数据库重新设置缓存主线程返回过期数据没有获取互斥锁的都返回过期数据。 完整代码如下 //逻辑过期public Shop queryWithLogicalExpire(Long id) {String key CACHE_SHOP_KEY id;//1.从redis查询商铺缓存String shopJson stringRedisTemplate.opsForValue().get(key);//2.判断是否存在if (StrUtil.isBlank(shopJson)) {//3.未命中return null;}//4.命中需要先把json反序列化为对象RedisData redisData JSONUtil.toBean(shopJson, RedisData.class);Shop shop (Shop) redisData.getData();LocalDateTime expireTime redisData.getExpireTime();//5.判断是否过期if (expireTime.isAfter(LocalDateTime.now())) {//5.1还未过期return shop;}//5.2已经过期需要缓存重建//6.缓存重建//6.1获取互斥锁String lockKey LOCK_SHOP_KEY id;boolean isLock tryLock(lockKey);//6.2判断是否获取锁成功if (isLock) {// 6.3成功开启独立线程实现缓存重建CACHE_REBUILD_EXECUTOR.submit(() - {try {//重建缓存this.saveShop2Redis(id, 20L);} catch (Exception e) {e.printStackTrace();} finally {//释放锁unlock(lockKey);}});}//6.4返回过期的店铺信息//7.返回return shop;} 2.2 设置互斥锁 怎么才能不让大量数据去访问数据库呢 或许大家已经想到了上面设置逻辑过期用到过的一个功能互斥锁。 请求首先访问缓存如果命中的话直接返回该数据。 如果未命中的话则去获取互斥锁获取成功则查询数据库重新设置缓存获取失败则重试获取缓存数据。 完整代码如下 /*** 通过互斥锁机制查询商铺信息* param key*/private Shop queryShopWithMutex(String key, String cityCode) {Shop shop null;// 1.查询缓存String shopJson stringRedisTemplate.opsForValue().get(key);// 2.判断缓存是否有数据if (StringUtils.isNotBlank(shopJson)) {// 3.有,则返回shop JSONObject.parseObject(shopJson, Shop.class);return shop;}// 4.无,则获取互斥锁String lockKey RedisConstants.LOCK_SHOP_KEY shopCode;Boolean isLock tryLock(lockKey);// 5.判断获取锁是否成功try {if (!isLock) {// 6.获取失败, 休眠并重试Thread.sleep(100);return queryShopWithMutex(key, shopCode);}// 7.获取成功, 查询数据库shop baseMapper.getByCode(shopCode);// 8.判断数据库是否有数据if (shop null) {// 9.无,则将空数据写入redisstringRedisTemplate.opsForValue().set(key, , RedisConstants.CACHE_NULL_TTL, TimeUnit.MINUTES);return null;}// 10.有,则将数据写入redisstringRedisTemplate.opsForValue().set(key, JSONObject.toJSONString(shop), RedisConstants.CACHE_SHOP_TTL, TimeUnit.MINUTES);} catch (Exception e) {throw new RuntimeException(e);} finally {// 11.释放锁unLock(lockKey);}// 12.返回数据return shop;}关于两种方案各有各的优缺点 逻辑过期 及时性高但数据不是最新数据适合最终一致性的业务互斥锁 一致性高但会有数据延迟适合强一致性的业务 四、缓存雪崩 1. 问题描述 缓存雪崩可以简单的理解为大范围的缓存击穿。 有两个可能引起缓存雪崩问题 有大量的热门缓存同时失效。会导致大量的请求访问数据库。而数据库很有可能因为扛不住压力而直接挂掉。缓存服务器down机了可能是机器硬件问题或者机房网络问题。造成了整个缓存的不可用。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/332236c568114666ae63f7ad3e20ea9e.png 2. 问题解决 2.1 设置随机过期时间 为了解决缓存雪崩问题我们首先要尽量避免缓存同时失效的情况发生。 这就要求我们不要设置相同的过期时间。 可以在设置的过期时间基础上再加个1~60秒的随机数。 实际过期时间 过期时间 1~60秒的随机数 这样即使在高并发的情况下多个请求同时设置过期时间由于有随机数的存在也不会出现太多相同的过期key。 2.2 缓存高可用 针对缓存服务器down机的情况在前期做系统设计时可以做一些高可用架构。 可以使用哨兵机制或者集群模式当一个Redis宕机随时会有一个Redis补充上来避免一个Redis宕机而导致大量请求去访问数据库而使数据库压力过载。 比如使用哨兵模式之后当某个master服务下线时自动将该master下的某个slave服务升级为master服务替代已下线的master服务继续处理请求。 总结 缓存穿透、缓存击穿和缓存雪崩是三种与缓存相关的常见问题它们的概念和影响有所不同。 关于Redis缓存三兄弟的问题及解决主要就是以下几个方面 缓存穿透 缓存穿透指的是对于一个不存在于缓存和数据库中的数据的请求每次请求都会穿过缓存层直接访问数据库。 恶意的攻击者可以通过构造不存在的数据请求导致大量请求直接访问数据库增加数据库负载压力。 解决缓存穿透可以采用存储空数据和合适的校验技术例如使用布隆过滤器等技术在缓存层进行初步过滤避免无效请求直接访问数据库。 缓存击穿 缓存击穿指的是在高并发情况下一个热点数据过期或失效时大量请求同时涌入数据库造成数据库压力激增。 由于热点数据没有命中缓存而直接访问数据库使得缓存无法发挥作用增加了数据库的负载。 解决缓存击穿可以采取设置热点数据永不过期或者使用互斥锁等机制来控制只有一个线程去加载数据。 缓存雪崩 缓存雪崩指的是在某个时间点缓存中的大量数据同时失效或过期或者缓存服务宕机导致大量请求直接访问后端数据库造成数据库压力过大。当缓存中的数据集中过期或失效时没有缓存可用导致大量请求直接访问数据库可能引起数据库负载激增甚至崩溃。解决缓存雪崩可以采用合理的缓存失效时间设置、使用高可用架构等方式来减少缓存失效的风险。 当然能解决的方式有很多这里只是列举出来常见的解决方法。如果有更好的建议可以发在评论区。 结语 每个人都有自己独特的才华和潜能在这个广袤的世界上你的存在是有意义的。无论你是谁你的背景如何你所处的环境怎样只要你敢于跨出舒适区付出努力追求卓越你就能够开创属于自己的辉煌。 我们下期见。 每一次努力都是一次进步即使进展缓慢也要坚持不懈。 往期文章推荐 消息中间件相关面试题Java集合相关面试题Java集合详解微服务相关面试题redis相关面试题图解 Paxos 算法Spring相关面试题Mysql相关面试题
http://www.zqtcl.cn/news/898580/

相关文章:

  • ps做网站原形系统学做网站
  • 接网站 建设wordpress 打开慢 google
  • wordpress 移动 建站网站前台如何做访问量显示
  • 公司做网站买域名之后做什么打鱼网站开发
  • 南京市城乡建设局网站二级建造师证件查询
  • 百度关键词优化系统网站优化师招聘
  • 网站方案建设书推广产品的软文怎么写
  • 网站栏目按扭邢台手机网站建设地方
  • 青浦赵巷网站建设做网站需要编程吗
  • 公司logo设计含义株洲seo
  • 公司制作网站做论坛网站怎么赚钱吗
  • 深圳 外贸 网站建设 龙医院网站建设价格
  • 网上建网站驰易网站建设
  • 建设工程招标专业网站网站联盟广告
  • 自建站英文公司网站制作银川
  • 顺德网站建设公司信息全网推广软件
  • 网站全屏视频怎么做电子商务网站规划的原则是什么
  • 网站建设行业发展史做网站主页上主要放哪些内容
  • 成都成华网站建设小程序开发网上商城
  • 企业网站建设的重要性和必要性深圳设计网站排行
  • 山西省网站建设河南省考生服务平台官网
  • 做水产的都用什么网站wordpress 前端登陆
  • 商务网站建设网站开发一个软件开发的流程
  • 网站建设电脑和手机有区别吗公众号登录微信入口
  • 天津市建设监理协会网站三亚网络网站建设
  • 义乌进货网平台北京网优化seo优化公司
  • 在网站上放广告网站建设流程效果
  • 腾讯云学生机做网站济南网站改版
  • 开封市做网站的公司wordpress无法映射
  • 网站构建工具wordpress 主题授权