Java阶段五Day18

这篇具有很好参考价值的文章主要介绍了Java阶段五Day18。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Java阶段五Day18

缓存方案

Java阶段五Day18,培训之旅,java,开发语言,spring cloud

面试题整理

目标:

  • 整理相关问题的话术,碰到问题

思路: 概念 是什么 原因 为什么 解决方案 如何解决

  • 缓存雪崩

    • 概念: 缓存在长期应用的系统中,存储了大量的高并发访问数据,一旦这些数据突然批量消失,访问吞吐的并发,到达数据库,导致数据库崩溃
    • 原因:
      • 大量数据超时时间固定,相同的
      • redis分片宕机(数据分布式)短时间造成雪崩,但是不会持续,也不会总是交给代码处理,因为高并发高吞吐的redis架构是cluster,保证集群高可用,数据的高可靠性
    • 解决方案:
      • 超时时间不要固定
      • 第二种代码不提供解决方案,最多降级处理(不重要的数据降级)
  • 缓存穿透

    • 概念: 缓存没有命中数据,同时数据库也没有命中数据,缓存穿透就出现了
    • 原因:
      • 故意造成,高并发请求,携带无效数据
      • 错误,误差
    • 解决方案:
      • 错误误差: 通过日志,监控
      • 故意: 引入过滤器(布隆过滤器),拦截根本不存在的数据.或者对于数据库查询为null的(临时数据),也存储到缓存(redis可能会因为大量故意访问,出现大量null数据)
  • 缓存击穿

    • 概念: 对于cache-aside缓存方案中,命中返回缓存,没命中查询数据库.如果没命中的数据是热点数据(并发高,访问高)可能造成大量线程在缓存都没有命中数据,都到数据库查询数据
    • 原因: 高并发访问热点数据,缓存方案cache-aside 造成的逻辑问题
    • 解决方案: 分布式锁.

    Java阶段五Day18,培训之旅,java,开发语言,spring cloud

    穿透和击穿的区别

    1. 穿透是缓存没有,数据库也没有,击穿缓存没有,但是数据库有
    2. 都是高并发造成的影响,穿透更多的情况是大量不同数据,击穿针对少量(相同)业务数据(热点)
  • 一致性

    • 批量一致性
      • 批量: 一次性处理大批数据
      • 解决方案: 预热同步.同步刷新
    • 增量一致性
      • 增量: 一次处理1条,几条数据,相比于批量百万,千万级别数据量,非常小的数据量
  • 增量一致性场景: redis存储200万数据,有一条数据存储了一个电脑的商品信息,后台对这个电脑数据做了变更,原价在数据库200元-500元.

    • redismysql同步改(写,先写谁,后写谁)
      • 先写redis(200-500) 再写数据库(200-500)——问题数据库写失败
      • 先写数据库(200-500)再写redis(200-500)——处理事务问题
    • redis先删,mysql
      • 造成高并发下的数据不一致问题(因为cache-aside缓存方案)

    Java阶段五Day18,培训之旅,java,开发语言,spring cloud

    • 采用双删(延迟双删

    延迟双删和双删的区别,就是第二次删除redis的时候,是否要先等待1~3秒

    Java阶段五Day18,培训之旅,java,开发语言,spring cloud

项目功能

新增审核

业务流程图

Java阶段五Day18,培训之旅,java,开发语言,spring cloud

账户

账户表格和ER图

Java阶段五Day18,培训之旅,java,开发语言,spring cloud

账号服务功能

Java阶段五Day18,培训之旅,java,开发语言,spring cloud

账号的创建
  • 什么时候调用账号创建? 审核通过创建
  • 调用方式:dubbo
  • account provider角色 在account-server 有对外暴露的接口
  • adapter层 实现这个接口,并且server启动时,支持dubbo运行

账号dubbo远程调用,检查调整的内容

第一步: 确定角色 谁是provideradmin serveraccount-server 谁是consumer worker-admin

第二步: dubbo配置

  1. 依赖(当前在源代码基础上实现的配置,依赖一般不需要检查)
  2. applicationContext
    1. dubboreference dubboservice 代替原来自动配的注解 @DubboReference@DubboService
    2. 其他标签都对应的yaml文件配置
  3. provider 提供实现(accountRpcService 有没有添加@Service
  4. consumer 注入使用(@Autowired
当前实现功能时序图(对应全景图)

https://sparrowzoo.feishu.cn/docx/My4mdlLuMovmQixHko4c6qXbnYc?from=from_copylink

抢单相关时序图

供应商和需求单

https://sparrowzoo.feishu.cn/docx/My4mdlLuMovmQixHko4c6qXbnYc?from=from_copylink

需求单是供应商通过远程调用提供的接口推送过来的

现在没有这个流程,在数据库直接准备可以抢的需求单

数据request_order表格 修改grab_status 抢单状态0 还没人抢 1 已经被抢了,version 0 1 表示版本(防止抢单多线程并发,导致抢单 多个师傅抢到一个订单)

Java阶段五Day18,培训之旅,java,开发语言,spring cloud

附录

布隆过滤器

布隆工作流程(filter

Java阶段五Day18,培训之旅,java,开发语言,spring cloud

布隆过滤器缺点文章来源地址https://www.toymoban.com/news/detail-627011.html

  • 批量新增到布隆,也可以增量新增,不能删除(重新清空预热)
  • 判断存在的概率,有可能误判的。比如100万条,判断100万条存在。200条实际是不存在的,即:误差0.02%

到了这里,关于Java阶段五Day18的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java阶段五Day20

    完成订单 通过分布式消息事务解决本地事务和发消息的一致性 OrderServerService MessageTransSenderRepository MessageTransRepoImpl LocalTransactionLisetner 结算订单 业务流程图 结算执行业务流程 在消费之前 添加分布式锁逻辑 远程调用 provider : account-server (暂时还没实现) consumer : settle-se

    2024年02月14日
    浏览(32)
  • Java阶段五Day09

    Path , Host 断言都可以实现多服务网关入口 Path 做断言没有跨域问题的(路径断言 域名和端口统一的) 跨域: 只要资源访问请求原始域和目标域其中域名和端口有一个不一样,就叫做跨域 以京东首页为例,理解 cors 首页有一个 ajax 请求 访问 getInfo 资源访问服务 https://black

    2024年02月17日
    浏览(36)
  • Java阶段五Day08

    学习内容目的 springboot自动配置原理 实现自定义starter(未完善) 自动配置原理 核心注解: SpringBootApplication 组合3个注解: 扫描( ComponentScan ) 配置( SpringBootConfiguration ) 自动配置( EnableAutoConfiguration ) 自动配置注解的逻辑: 在启动类的基础上,导入了springboot的大量自动配

    2024年02月17日
    浏览(35)
  • Java阶段五Day16

    启动servlet冲突问题 解决方法:启动项目main 将传递过来 servlet-api 依赖去除 nacos注册中心 依赖 yaml配置 用户信息验证失败 断点查看源代码 LoginUserFilter (在处理网关解析后的 jwt 数据 userJson 字符串) 如果过滤器不生效,就会导致解析 userJson 没执行,后端代码获取 LongUser 对象

    2024年02月14日
    浏览(31)
  • Java阶段二Day04

    导入学子商城webapp资源后访问其首页,发现页面无法正常显示. 浏览器F12跟踪请求和响应的交互发现两个问题: 1:我们仅发送了两个响应头(Content-Length和Content-Type). 虽然目前仅需要这两个头,但是服务端实际可以根据处理情况设置需要发送其他响应头 2: Content-Type 的值是固定的

    2023年04月23日
    浏览(29)
  • Java阶段二Day11

    主键与外键 主键(PK):一张表中通常第一个字段为主键字段,用来唯一标识表中的一条记录.主键要求的条件是非空且唯一 外键(FK):一张表中一个字段保存了另一张表中主键字段的值,那么这个字段就是外键字段 在关联关系中,两张表通常就是使用主外键进行关联的,

    2024年02月01日
    浏览(43)
  • Java阶段四Day11

    AOP:面向切面编程 注意:AOP并不是Spring原创的技术,也不是Spring的独家技术,而是源自AspectJ,只是Spring很好的支持了AOP。 AOP技术主要解决了“横切关注”的相关问题,也就是“若干个不同的方法都需要执行相同的任务”的问题! 在许多框架中,都通过AOP技术实现了对应的功

    2024年02月13日
    浏览(30)
  • Java阶段二Day01

    StringBuilder是线程不安全的 StringBuffer是线程安全的,它的 append 方法有 synchronized 修饰 StringBuffer是1.0时候出现的,StringBuilder是1.5时候出现的 一般不再多线程情况下使用同一个字符串,所以对线程安全效率低的StringBuffer用的少,所以出现了StringBuilder,其线程虽不安全但是效率高

    2023年04月15日
    浏览(34)
  • Spring Cloud微服务架构组件【Java培训】

    SpringCloud是一系列框架的有序集合,为开发人员构建微服务架构提供了完整的解决方案。Spring Cloud根据分布式服务协调治理的需求成立了许多子项目,每个项目通过特定的组件去实现,下面我们讲解一下Spring Cloud 包含的常用组件以及模块。 (1)Spring Cloud Config:分布式配置中心

    2023年04月25日
    浏览(43)
  • 项目一:踏上Java开发之旅

    在Java编程之旅中,首先通过安装并配置JDK作为能量源泉,搭建起与操作系统对话的魔法桥梁。接着,开发者运用文本编辑器或IDE创建并编译执行第一个简单的“Hello Java World~”程序,成功开启了通向Java世界的大门。 随后引入强大的集成开发环境IntelliJ IDEA,以其高效的特性及

    2024年01月25日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包