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

中国最受欢迎的网站/seo用什么工具

中国最受欢迎的网站,seo用什么工具,腾讯云网站托管,dz地方门户网站制作一、场景介绍 我们平时做数据缓存的时候,一般套路是在项目启动时,将热点数据加载到缓存中,请求接口时,如果缓存中存在,优先从缓存中获取返回,如果缓存中不存在,才会从数据库中查询并设置到缓存中…

一、场景介绍

        我们平时做数据缓存的时候,一般套路是在项目启动时,将热点数据加载到缓存中,请求接口时,如果缓存中存在,优先从缓存中获取返回,如果缓存中不存在,才会从数据库中查询并设置到缓存中,通过这种方式来提升系统的相应性能、减少数据库访问压力。

        缓存穿透的意思就是,一些恶意请求故意去获取缓存和数据库都不存在的数据,导致每次都会跳过缓存直击数据库,当这种恶意请求数量巨大时,首先会导致其他正常请求无法得到响应,第二是有可导致数据库崩溃导致系统不可用,危害巨大。

二、不合法数据存入redis

        将恶意请求的key存入redis中,等下次同样的请求再次请求时,就可以直接从redis中获取并返回,减少数据库访问压力。

        这是一种好办法,不过既然都是恶意请求了,肯定不可能只发一个缓存和数据库都不存在的key,一定是大量不重复的请求数据,这就是个问题了,redis空间是有限的,一直往redis中存储这种恶意请求的数据,那么redis迟早也会被占满,到时候redis就算不挂(redis内存被占满时,可以配置合适的淘汰策略防止redis无法对外服务),里面也就剩些垃圾数据了,到时候数据库还是得完蛋。所以这种方案不可靠。

三、布隆过滤器

3.1、布隆过滤器介绍

        布隆过滤器就是在redis前在挡一层,请求先经过布隆过滤器,如果布隆过滤器中存在,再走查缓存或者数据库的逻辑,否则就直接返回。

3.2、布隆过滤器设计理念

        布隆顾虑器本质上是由一个int数组和多个hash方法组成,具体的工作流程是这样的:初始化状态下,数组中的元素都为0。数据需要存到布隆过滤器时,先经过N个hash方法计算出N个下标,将这些下标的数组元素设置为1。数据读取时也是一样,通过N个hash方法计算出下标,查看所有命中的下标元素是否都是1,如果是,说明数据是合法的,运行进行后续的逻辑,否则直接返回。

        布隆顾虑器有缺点吗?没有完美的技术,缺点那必然是有的,比如说key1设置的数组下标是1、2、3;key2设置数组下标是1、3、5;key3设置的数组下标是2、6、7;此时如果正好有一个恶意的key4,他经过hash后,计算出的下标是2、5、6。这三个下标中的元素已经被设置成1了,所以虽然key4虽然不存在,但是也能通过布隆过滤器的校验,这个问题学名叫做误判率,使用布隆过滤器,这个误判率是一定存在的,默认情况下,这个误判率是百分之五,一般项目都是可以接受的,如果要减少误判率,可以通过增大数组的方式来做。

3.3、布隆过滤器使用

        3.3.1、我们先用代码简单模拟一下缓存穿透的样子,我们先获取缓存中存在的数据,如下图所示,在缓存中存在时,控制台不会打印查询sql,说明没走数据库,直接从缓存中获取到了数据。

@Testpublic void requestSearchCodeRuleTest(){String data = findData(1L);System.out.println(data);}/*** 功能描述: 通过id查询* @Author:huhy* @Date: 2025/3/21 21:49*/private String findData(Long id){String key = "dataConsistent:" + id;Object dataObj = redisTemplate.opsForValue().get(key);//如果缓存中不存在,则从数据库中查询if(Objects.isNull(dataObj)){return searchCodeRuleAndSetRedis(id);}else {//如果缓存中存在,直接返回return dataObj.toString();}}/*** 功能描述: 查询并设置到缓存* @Author:huhy* @Date: 2025/3/21 20:56*/private String searchCodeRuleAndSetRedis(Long id){//通过id查询编码规则TSCodeRule tsCodeRule = codeRuleService.selectTSCodeRuleById(id);if(Objects.isNull(tsCodeRule)){hrow new RuntimeException("id【"+id+"】 不存在!");}String roleJson = JSON.toJSONString(tsCodeRule);//将测试数据保存到redis中String key = "dataConsistent:"+tsCodeRule.getId();redisTemplate.opsForValue().set(key,roleJson);return roleJson;}

          

        此时我们开始搞点事情,请求一个缓存不存在的数据看看控制台的效果。为了效果更明显一点,我在代码中故意抛出了异常,其实实际开发时不需要这么写,这个需要注意。

        如下图所示,故意请求一个id不存在的,日志打印了sql,说明数据库被访问了。

3.3.2、真正振奋人心的时候到了,我们使用布隆过滤器来解决这个问题,还记得前两期我们使用过的分布式锁框架redisson吗?redisson为我们提供了布隆过滤器的API,我们可以直接使用,简直太方便了(让我还掏着了,嘿嘿嘿)。

@Testpublic void requestSearchCodeRuleTest(){String data = findData(100L);System.out.println(data);}/*** 功能描述: 通过id查询* @Author:huhy* @Date: 2025/3/21 21:49*/private String findData(Long id){//创建布隆顾虑器RBloomFilter<String> bloomFilter = redissonClient.getBloomFilter("bloom-filter");//设置误判率bloomFilter.tryInit(100967256, 0.01);//初始化数据bloomFilter.add("dataConsistent:" + 1L);bloomFilter.add("dataConsistent:" + 2L);String key = "dataConsistent:" + id;//先判断布隆过滤器中是否存在boolean bloomContains = bloomFilter.contains(key);if(!bloomContains){System.out.println("id ["+id+"] 查无数据!");return null;}Object dataObj = redisTemplate.opsForValue().get(key);//如果缓存中不存在,则从数据库中查询if(Objects.isNull(dataObj)){return searchCodeRuleAndSetRedis(id);}else {//如果缓存中存在,直接返回return dataObj.toString();}}/*** 功能描述: 查询并设置到缓存* @Author:huhy* @Date: 2025/3/21 20:56*/private String searchCodeRuleAndSetRedis(Long id){//通过id查询编码规则TSCodeRule tsCodeRule = codeRuleService.selectTSCodeRuleById(id);String roleJson = JSON.toJSONString(tsCodeRule);//将测试数据保存到redis中String key = "dataConsistent:"+tsCodeRule.getId();redisTemplate.opsForValue().set(key,roleJson);return roleJson;}

四、结语

        本次简单介绍了缓存穿透的问题,这只是缓存三部曲第一个,后续我会继续和大家分享缓存击穿和雪崩问题,希望可以和大家一起学习进步,谢谢大家。

http://www.whsansanxincailiao.cn/news/32035296.html

相关文章:

  • vuejs 网站开发/免费海报模板网站
  • 对于网站建设提出建议/网站收录提交
  • 可以做文档赚钱的网站/最新的疫情情况
  • adobe做网站的软件/关键词优化一年的收费标准
  • 国外做旅游攻略的网站/seo关键词优化推荐
  • 哪家网站做的好/鄂州seo
  • 新网站如何做流量/网络推广官网首页
  • 公司网站设计与实现的英文文献/青岛网站建设与设计制作
  • 网站建设广告宣传/金华百度seo
  • 织梦怎么做中英文网站/百度下载并安装最新版
  • 网站被劫持/百度竞价推广方案范文
  • 长春市网站建设dbd3/百度号注册官网
  • 制作网站的程序/推广网络营销外包公司
  • jsp做网站框架/不受限制的搜索引擎
  • 公司设计一个网站/seo优化工作
  • 做网站工作/济南百度代理
  • 我的网站怎么转网页呢/厦门关键词优化平台
  • 规则网站建设/外链推广平台
  • heritrix做网站/网络销售平台排名
  • wordpress阿里云服务器开启伪静态/谷歌seo运营
  • 潍坊美丽乡村建设一般发了哪个网站/app制作费用一览表
  • 哪里可以接网站开发的活/seo包括哪些方面
  • 用phpcms建网站流程/网络营销策划的基本原则
  • 哪家公司做网站/事件营销的经典案例
  • 有知道做网站的吗/网络营销十大成功案例
  • 银川做网站建设/厦门百度开户
  • 百度联盟怎么做网站加入/百度云官网登录首页
  • 魅影视频/站长seo推广
  • 小程序公司排名/合肥seo培训
  • 无锡做网站好/东莞百度推广排名