Java阶段五Day17

news2024/9/30 7:17:01

Java阶段五Day17

文章目录

  • Java阶段五Day17
    • 师傅后台功能
      • 师傅审核列表
        • 相关功能
        • 启动进程和启动方式
      • 后台审核详情查询
        • 查询审核详情流程
        • 远程调用图片服务
      • 缓存逻辑
        • 缓存逻辑流程
        • 查询引入缓存流程
        • 完成缓存逻辑
        • 面试题整理
    • 附录
      • redis分布式——架构演变

师傅后台功能

师傅审核列表

相关功能

业务流程图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k6UD1cXX-1691149001565)(E:/TeduWork/notes-2303/%25E8%25AF%25BE%25E5%25A0%2582%25E7%25AC%2594%25E8%25AE%25B0/Day17/assets/image-20230731091104066.png)]

分页查询参数

  • pageNo:页数
  • pageSize:每页条数
  • total:总条数 (select count(*)
  • totalPage(lastPageIndex):总页数(total % pageSize== 0 ? total / pageSize:(total / pageSize + 1)
  • select * from table_a where 条件 limit 0,5
  • select * from table_a where 条件 limit start,rows
  • start=(pageNo-1)*rows
  • rows=pageSize

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UQwvc7ao-1691149001566)(E:/TeduWork/notes-2303/%25E8%25AF%25BE%25E5%25A0%2582%25E7%25AC%2594%25E8%25AE%25B0/Day17/assets/image-20230731104149529.png)]

在持久层查询数据(列表),将pageNopageSize做了limit分页条件的封装 ,limit 0,5 这样的结果 会拼接到 sql 语句中

select * from table_a where 条件 #{limit}

select * from table_a where 条件 "limit 0,5"

select * from table_a where 条件 ${limit}

select * from table_a where 条件 limit 0,5

${} 其他案例

  • 需求: 查询用户信息 username phone email,将三种不同查询条件,使用一个sqlxml映射完成

    • **Dao

    • user getUserByCondition(String condition,String value);

    • select * from user where ${condition} = #{value};

    • select * from user where username="张三"
      
  • 需求:使用不同的条件,做不同的排序, 时间字段 desc asc 不同查询

    • **Dao

    • List<User> getUsersDescByColunme(String colunme)

    • select * from user where 条件 order by ${colunme} desc

    • select * from user where 条件 order by gmt_create descd
      

启动进程和启动方式

  • 软件工具

    • nacos
    • mysql(不用主动启动,必须有表格)
  • java进程

    • passport
      • bat / shell脚本启动(知道里面java命令)
    • attach(附件服务)
      • businessType
      • businessId
    • gateway
  • 前端

    • luban-front
    • luban-admin-front
  • 测试的服务

    • worker-admin

后台审核详情查询

查询审核详情流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PzYzZsDP-1691149001566)(E:/TeduWork/notes-2303/%25E8%25AF%25BE%25E5%25A0%2582%25E7%25AC%2594%25E8%25AE%25B0/Day17/assets/image-20230731114035849.png)]

查询审核详情 涉及到查询worker详情

使用的参数 userId

远程调用图片服务

  • 怎么调用: dubbo
  • 配置调用dubbo: 业务无侵入
    • 依赖
    • xml
  • 在业务层注入attachApi

缓存逻辑

缓存逻辑流程

Cache-Aside 缓存方案

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GlOpzoWo-1691149001567)(E:/TeduWork/notes-2303/%25E8%25AF%25BE%25E5%25A0%2582%25E7%25AC%2594%25E8%25AE%25B0/Day17/assets/image-20230731152001725.png)]

查询引入缓存流程

业务:师傅area和 师傅分类

  • key值如何设计:userId / workerId
    • “业务前缀”: worker:area worker:cat
    • “业务数据”: userId
  • 数据如何绑定到redis
    • String
    • hash
    • list

类图

​	[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QkACprmP-1691149001568)(E:/TeduWork/notes-2303/%25E8%25AF%25BE%25E5%25A0%2582%25E7%25AC%2594%25E8%25AE%25B0/Day17/assets/image-20230731153654241.png)]

/**
 * @author liner
 * @version 1.0
 */
public abstract class AbastractCacheRepository<T> {
    //setCacheList areaBO categoryBO
    public boolean setCacheList(String key, List<T> t){
        //TODO redis list结构的数据,存储缓存
        return true;
    }
    public List<T> getCacheList(String key){
        //TODO
        return null;
    }
    //将单个对象T 序列化成Json字符串
    abstract String searialize(T t);
    //单个对象反序列化
    abstract T deSearilaize(String json);
}

完成缓存逻辑

  • 依赖
  • 完成代码

面试题整理

目标:

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

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

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

附录

redis分布式——架构演变

单机

  • 优点: 搭建简单
  • 缺点: 读写瓶颈,单机故障,存储数据总量上限
  • 使用场景: 不会在线上(testprod)系统使用(除非没什么并发),会搭建在开发场景

哨兵集群

  • 优点: 管理主从的集群,可以解决单点故障问题
  • 缺点: 不能实现分布式,不能实现高吞吐、高并发、大量数据存储
  • 使用场景: 考虑高可靠性的,但是没有高并发的场景

cluster: 多个主从组成的集群,引入分布式计算

  • 优点: 高吞吐、高并发、高数据存储容量
  • 缺点: 数据设计key值如果不合理,批量读写会导致性能极大浪费(没有批量需求的业务,碰不见)
  • 使用场景: 高并发、高吞吐场景

6个redis 总吞吐量保守估计 4C4G(6台) 服务器中10万/s

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/837159.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

熟练掌握ChatGPT解决复杂问题——学会提问

目录 引言 一、5W1H分析法 1. 简单的问题&#xff08;what、where、when、who&#xff09; 2.复杂的问题&#xff08;why、how&#xff09; 2.1 为什么&#xff08;Why&#xff09;——原因 2.2 方式 &#xff08;How&#xff09;——如何 二、如何提问得到更高质量的答案…

mysql按照日期分组统计数据

目录 前言按天统计按周统计按月统计按年统计date_format参数 前言 mysql的date_format函数想必大家都使用过吧&#xff0c;一般用于日期时间转化 # 例如 select DATE_FORMAT(2023-01-01 08:30:50,%Y-%m-%d %H:%i:%s) # 可以得出 2023-01-01 08:30:50# 或者是 select DATE_FOR…

python中*与**的使用

文章目录 前言一、*与**在函数定义时二、*与**在函数调用时 前言 在python中*与**的使用要区分是在函数定义时还是在函数调用时。 一、*与**在函数定义时 def deng(*args,**kwargs):print(args)print(kwargs)deng(1,2,3,a 4,b 5)在函数定义时参数前面使用*&#xff0c;代表…

面试必考精华版Leetcode872. 叶子相似的树

题目&#xff1a; 代码&#xff08;首刷看解析 day23&#xff09;&#xff1a; class Solution { public:void dfs(TreeNode* root,vector<int>& seq){if(!root->left&&!root->right){seq.emplace_back(root->val);}else{if(root->left){dfs(ro…

java讲解Spring Boot配置文件级别 相互覆盖关系 解决一方不愿意给数据库密码 一方不愿意给源码时 数据库配置问题

前面 我们讲过Spring Boot 修改临时变量的方式 但另一个场景 就是 我们 在本地开发环境 用的是一个配置 但如果项目经理上线 他想改这些配置 怎么弄呢 特别是数据库之类的配置 很多线上是不太一样的 那么 我们先看一个比较基本的方法 在配置文件的同目录下创建一个目录 叫 con…

Sketch打不开AI文件?转换方法在这里

1、对比设计软件 Sketch 与 AI 软件功能 Sketch 与 Illustrator 都是行业内优秀的矢量图形设计软件&#xff0c;各有千秋。Sketch 从 2010 年面世&#xff0c;专注 APP 界面设计&#xff0c;深受初学者与专业人士喜爱。Illustrator 拥有更悠久的历史&#xff0c;是处理复杂图标…

好用的数据库管理软件之idea(idea也有数据库???)

1.建立maven项目&#xff08;maven项目添加依赖&#xff0c;对于后期连接数据库很方便&#xff09; 2.连接数据库。。。 这里一定注意端口号&#xff0c;不要搞错了 和上一张图片不一样哦 3.数据库测试代码。。。 然后你就可以在这里边写MySQL代码了&#xff0c;这个工具对于新…

线程概念linux

何为线程&#xff1a; 线程是程序中负责执行的单位&#xff0c;它可以被看作是进程的一部分&#xff0c;是进程的子任务。线程与进程的区别在于&#xff0c;进程是一个资源单位&#xff0c;而线程是进程的一部分&#xff0c;它只有栈这个独立的资源&#xff0c;其他资源如代码…

Html页面连线工具

在项目中遇了一个需要连线配置的功能。该功能引用了 bootstrap、layui 、svg-line等插件 下载链接 lixhttps://download.csdn.net/download/dongyan3595/88168121

SpringBoot使用redis作为缓存的实例

目录 什么是缓存&#xff1f; 缓存的作用&#xff1f; 缓存的成本&#xff1f; 实际项目中的应用 代码展示 什么是缓存&#xff1f; 缓存就是数据交换的缓冲区&#xff08;称作Cache [ kʃ ] &#xff09;&#xff0c;是存贮数据的临时地方&#xff0c;一般读写性能较高。 缓…

持续集成这样做,App自动化测试效率提高50%

持续集成是一种开发实践&#xff0c;它倡导团队成员需要频繁的集成他们的工作&#xff0c;每次集成都通过自动化构建&#xff08;包括编译、构建、自动化测试&#xff09;来验证&#xff0c;从而尽快地发现集成中的错误。让正在开发的软件始终处于可工作状态&#xff0c;让产品…

XSS漏洞简单测试

1、如何防御 在springboot中可以使用拦截器进行输入框转换 2、XSS漏洞简单测试 网站&#xff1a;xss注册一下 注册账号&#xff0c;创建项目 选择对应的 点击下一步 在指定的地方输入即可 xxxxx文本 <script srchttp://xsscom.com//YdIbhc></script> 在我的项…

Linux 3.10 GCC版本太低升级到5.2.0

一、问题描述 某次升级内核&#xff0c;执行make menuconfig报当前版本太低&#xff0c;现场版本为4.8.5&#xff0c;需要升级到5.1.0版本以上&#xff0c;查看官网后&#xff0c;决定升级到5.20版本。注&#xff1a;GCC依赖于gmp 4.2, mpfr 2.4和mpc 0.8&#xff0c;报错如下&…

【机器学习】在 MLOps构建项目 ( MLOps2)

My MLOps tutorials: Tutorial 1: A Beginner-Friendly Introduction to MLOps教程 2&#xff1a;使用 MLOps 构建机器学习项目 一、说明 如果你希望将机器学习项目提升到一个新的水平&#xff0c;MLOps 是该过程的重要组成部分。在本文中&#xff0c;我们将以经典手写数字分类…

后端进阶之路——浅谈Spring Security用户、角色、权限和访问规则(三)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★前端炫酷代码分享 ★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ 解决算法&#xff0c;一个专栏就够了★ ★ 架…

Cocos creator(2d) 使用 shader + uv 实现单张图片衔接滚动效果

在游戏中&#xff0c;当我们需要让背景图片无缝衔接无限滚动时(打飞机这种背景一直滚动&#xff0c;或者肉鸽游戏地图一直在走等等)&#xff0c;通常的做法是 在游戏中放两个背景node&#xff0c;在update中控制这两张背景图片的移动&#xff0c;并让其收尾衔接即可。(具体代码…

2023-08-04 LeetCode每日一题(不同路径 III)

2023-08-04每日一题 一、题目编号 980. 不同路径 III二、题目链接 点击跳转到题目位置 三、题目描述 在二维网格 grid 上&#xff0c;有 4 种类型的方格&#xff1a; 1 表示起始方格。且只有一个起始方格。2 表示结束方格&#xff0c;且只有一个结束方格。0 表示我们可以…

自然语言处理: 第六章Transformer- 现代大模型的基石

理论基础 Transformer&#xff08;来自2017年google发表的Attention Is All You Need (arxiv.org) &#xff09;&#xff0c;接上面一篇attention之后&#xff0c;transformer是基于自注意力基础上引申出来的结构&#xff0c;其主要解决了seq2seq的两个问题: 考虑了原序列和目…

项目经理必读:领导风格对项目成功的关键影响

引言 项目经理作为一个领导者的角色&#xff0c;他们需要协调各方资源&#xff0c;管理团队&#xff0c;推动项目的进行。为了完成这些任务&#xff0c;项目经理必须具备各种领导风格的灵活性&#xff0c;以应对项目中的各种变数和挑战。在这篇文章中&#xff0c;我们将讨论领…

【洛谷】p1825 [USACO11OPEN] Corn Maze S

从快吃中饭开始看题&#xff0c;一直到晚上七点半终于AC了&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 写篇题解记录一下这个激动人心的时刻 文章目录 题目&#xff1a;[USACO11OPEN] Corn Maze S题面翻…