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

接口优化笔记

索引

添加索引

where条件的关键自动或者order by后面的排序字段可以添加索引加速查询

索引只能通过删除+新增进行修改,无法直接修改。

# 查看表的索引
show index from `table_name`;
show create table `table_name`;
# 添加索引
alter table `table_name` add index idx_name(name);
create index idx_name on `table_name` (name);
# 删除索引
alter table `table_name` drop index idx_name;
drop index idx_name on `table_name`;
索引是否生效

添加的索引,并不一定会生效,可以通过explain查看SQL的执行计划。

EXPLAIN SELECT * FROM zz_user WHERE user_id = '1';

在这里插入图片描述
在这里插入图片描述

索引失效原因
在这里插入图片描述

选错索引

SQL优化

在这里插入图片描述

远程调用

并行调用

当一个接口中调用的多个远程方法之间没有先后依赖顺序时,可以使用并行调用,这样整个接口的耗时就会以最长耗时的远程为主。比如要查询一个人的全量信息,而这个人的全量信息保存在不同的服务中,比如用户服务、积分服务、成长值服务中时,可以通过一个关键数据,比如用户的id同时去这三个服务中进行查询,查询后进行汇总。这样就可以减少接口总耗时。

数据异构

可以通过数据冗余,将用户服务、积分服务、成长值服务三个服务中的数据统一放到一个地方,比如redis中,这样就可以减少远程调用的次数了。

但因为数据被存储在了两个不同的地方,数据进行更新时,就会因为更新时间问题导致数据的不一致性出现。

重复调用

循环查询数据库

当需要查询一批用户的信息时,很大程度上会去遍历用户信息关键字的集合,通过对每一个关键字查询一次数据库,将查询到的数据进行汇总。这样会因为网络、数据库的连接、验证等操作耗费很多的时间。可以对这批用户集合进行批量查询。只需要远程调用一次,就可以查询出所有的数据。批量查询的记录条数要有限制,最好控制在500以内。oracle的in关键字最多只能放1000个关键字

死循环

避免因为退出条件的判断出错导致循环无法结束。

无限递归

在进行递归处理时,如果一个节点的子节点指向了它的父节点导致形成了一个循环,这样就会出现无限递归,出现栈溢出。

异步处理

对于一个接口中的非业务操作,比如用户操作记录、积分记录等不需要实时处理看到结果的,可以进行异步处理,减轻系统的压力,加快业务操作的响应

线程池

可以使用线程池进行非业务操作的处理,但可能会因为操作的异常、服务的异常(重启)导致操作的丢失,造成数据的丢失。

mq

可以将非业务操作放入到mq服务中,通过mq的高可用以及幂等重试保证操作的完整性。

避免大事务

在这里插入图片描述

  1. 少用@Transactional注解
  2. 将查询(select)方法放到事务外
  3. 事务中避免远程调用
  4. 事务中避免一次性处理太多数据
  5. 有些功能可以非事务执行
  6. 有些功能可以异步处理

锁粒度

synchronized
redis分布式锁
数据库分布式锁

分页处理

当要查询的数据量比较大时,可能会因为网路宽度的原因,导致查询的出现。查询的数据很多时,页面上也无法一次性展示,此时可以通过分页,减少一次性查询的数据库。也可以在多次查询后,将查询后的数据进行汇总。

缓存

redis缓存
二级缓存

分库分表

分库解决数据库连接资源不足问题和磁盘io的性能瓶颈问题

分表解决单表数据量太大,SQL语句查询数据时,即时走了索引也非常耗时的问题,此外也可以解决cpu资源问题。

相关文章:

接口优化笔记

索引 添加索引 where条件的关键自动或者order by后面的排序字段可以添加索引加速查询 索引只能通过删除新增进行修改,无法直接修改。 # 查看表的索引 show index from table_name; show create table table_name; # 添加索引 alter table table_name add index …...

pandas 科学计数法显示

我注意到pandas中有一个问题, 默认情况下,就是其中的数据的小数位不能超过6位,比如0.0000007就会被显示为0,这个结果如下 全部以科学技术显示 import pandas as pd import numpy as np# 设置显示格式为科学计数法 pd.options.d…...

PHP正则替换字符串中的图片地址

在PHP中&#xff0c;可以使用preg_replace()函数来实现正则表达式的替换功能。以下是一个简单的例子&#xff0c;演示如何替换字符串中的图片地址。 double $str 图片地址1&#xff1a;<img src"http://example.com/image1.jpg"> 图片地址2&#xff1a;<i…...

基于多商户AI智能名片商城小程序的粉丝忠诚度提升策略:深度融合足额法则与多维度激励体系

摘要&#xff1a;在数字化浪潮的推动下&#xff0c;多商户AI智能名片商城小程序以其独特的商业模式和技术优势&#xff0c;正逐步成为连接商家与消费者&#xff0c;特别是粉丝群体的重要平台。本文深入探讨了如何通过深度融合足额法则与多维度激励体系&#xff0c;有效提升多商…...

BigDecimal高精度运算

1. BigDecimal是什么类型&#xff0c;为什么可以转为double BigDecimal 是 Java 中用于表示任意精度的十进制数的类。它主要用于金融和商业计算&#xff0c;能够提供比 double 类型更高精度的运算&#xff0c;特别是在处理货币等需要精确计算的场景中。 1.1 BigDecimal 的基…...

C/C++实现蓝屏2.0

&#x1f680;欢迎互三&#x1f449;&#xff1a;程序猿方梓燚 &#x1f48e;&#x1f48e; &#x1f680;关注博主&#xff0c;后期持续更新系列文章 &#x1f680;如果有错误感谢请大家批评指出&#xff0c;及时修改 &#x1f680;感谢大家点赞&#x1f44d;收藏⭐评论✍ 前…...

Unity音频管理器插件AudioToolKit

Unity音频管理器插件AudioToolKit 介绍AudioToolKit介绍具体用法总结 介绍 最近在自己写音频管理器的时候在网上发现了一款比较好用并且功能很全的一个音频管理插件&#xff0c;叫做AudioToolKit的插件。 如果需要的可以直接从我资源中找AudioToolKit。 AudioToolKit介绍 A…...

搜维尔科技:驾驶模拟器背后的技术: Varjo的虚拟/混合现实 (VR/XR)提供独特的优势,最终加快汽车开发创新的步伐

专业驾驶模拟器广泛应用于车辆开发&#xff0c;帮助汽车行业在开发过程的早期做出更好的设计决策。总体目标是为测试驾驶员提供最真实的驾驶体验&#xff0c;包括动态动作和声音&#xff0c;并测试控制算法或辅助系统等功能。环境越真实&#xff0c;驾驶员的体验就越接近最终车…...

OSL 冠名赞助Web3峰会 “FORESIGHT2024”圆满收官

OSL 望为香港数字资产市场发展建设添砖加瓦 &#xff08;香港&#xff0c;2024 年 8 月 13 日&#xff09;- 8 月 11 日至 12 日&#xff0c; 由 香港唯一专注数字资产的上市公司 OSL 集团&#xff08;863.HK&#xff09;冠名赞助&#xff0c;Foresight News、 Foresight Ventu…...

LeetCode 3148.矩阵中的最大得分:每个元素与其左或上元素之差的最大值(原地修改O(1)空间)

【LetMeFly】3148.矩阵中的最大得分&#xff1a;每个元素与其左或上元素之差的最大值&#xff08;原地修改O(1)空间&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/maximum-difference-score-in-a-grid/ 给你一个由 正整数 组成、大小为 m x n 的矩阵 g…...

主流的开源大型语言模型

本期我们来聊聊目前主流的开源大型语言模型。这些模型就像是AI界的超级英雄&#xff0c;各具特色&#xff0c;为我们的研究和开发提供了强大的力量。&#x1f680; GPT-Neo&#xff1a;这是EleutherAI的杰作&#xff0c;它模仿了OpenAI的GPT-3。GPT-Neo虽然规模小一些&#xf…...

【自动驾驶】话题通信

目录 构建发布者构建订阅者编写lanch文件自动启动节点测试运行ROS的目录结构 切换到工作空间的src目录下&#xff1a; 构建发布者 catkin_create_pkg publisher std_msgs rospy roscpp编写发布者程序&#xff1a; // 1.包含头文件 #include "ros/ros.h" #include &…...

【Linux】中的软件安装:深入探索RPM、SRPM与YUM

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Linux &#xff1a;从菜鸟到飞鸟的逆袭》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Linux的起源与发展 2、RPM、SRPM与YUM的简要介…...

uniapp自定义请求头信息header

添加请求头&#xff1a;uniapp自定义请求头信息header&#xff0c;如下&#xff1a;添加tenant-id参数 代码...

SpringBoot整合Liquibase

1、是什么&#xff1f; Liquibase官网 Liquibase是一个开源的数据库管理工具&#xff0c;可以帮助开发人员管理和跟踪数据库变更。它可以与各种关系型数据库和NoSQL数据库一起使用&#xff0c;并提供多种数据库任务自动化功能&#xff0c;例如数据库迁移、版本控制和监控。Li…...

虚幻5|给武器添加碰撞检测与伤害

本章内容衔接上两章&#xff0c;需要完成上两章才能用本章内容 虚幻5|角色武器装备的数据库学习&#xff08;不只是用来装备武器&#xff0c;甚至是角色切换也很可能用到&#xff09;-CSDN博客虚幻5|普通攻击&#xff0c;使用接口更方便-CSDN博客 如有疑问&#xff0c;可访问…...

RESTful API设计指南:构建高效、可扩展的Web服务

目录 引言 一.RESTful API概述 二.设计原则 2.1. 资源导向 2.2. 使用标准的HTTP方法 2.3. 无状态通信 2.4. 可缓存响应 2.5. 分层系统 2.6. 按需加载代码&#xff08;可选&#xff09; 2.7. HATEOAS 三.最佳实践 3.1. 明确资源和子资源 3.2. 使用合适的HTTP状态码 …...

黑马头条vue2.0项目实战(九)——编辑用户资料

目录 1. 创建组件并配置路由 2. 页面布局 3. 展示用户信息 4. 修改昵称 5. 修改性别 6. 修改生日 7. 修改头像 7.1 图片上传预览 7.2 使用纯客户端的方式处理用户头像上传预览 7.3 头像裁切 7.4 纯客户端的图片裁切上传流程 7.5 Cropper.js 图片裁剪器的基本使用 …...

43.【C语言】指针(重难点)(F)

目录 15.二级指针 *定义 *演示 16.三级以及多级指针 *三级指针的定义 *多级指针的定义 17.指针数组 *定义 *代码 18.指针数组模拟二维数组 往期推荐 15.二级指针 *定义 之前讲的指针全是一级指针 int a 1; int *pa &a;//一级指针 如果写成 int a 1; int *pa &a…...

【STM32+HAL】杆球控制系统

一、前言 2017年电赛出了道板球控制系统题目&#xff0c;现写一个简化版本——杆球控制系统&#xff0c;以此记录电赛集训生活。 二、题目分析 最终采取的方案是&#xff1a;OpenMV读取小球的当前位置&#xff0c;并将坐标值传给STM32端&#xff0c;再由32通过电机改变杆的位置…...

用Python实现9大回归算法详解——04. 多项式回归算法

多项式回归 是线性回归的一种扩展&#xff0c;它通过将输入特征的多项式项&#xff08;如平方、立方等&#xff09;引入模型中&#xff0c;以捕捉数据中非线性的关系。虽然多项式回归属于线性模型的范畴&#xff0c;但它通过增加特征的多项式形式&#xff0c;使得模型能够拟合非…...

vue打包更新packge.json版本号

VUE项目打包自动更新版本号 此方法只针对 Vue 如果使用其他框架&#xff0c;可以此参照作为参考 一、先看效果 二、创建 buildVersion.js 文件 文件内容 目前只针对3位版本号 递增规则是 每次更新 加一次小版本&#xff0c;10次小版本向前递增一个版本。如&#xff1a;1.0.9 递…...

计算机视觉技术解析:从基础到前沿

第一部分&#xff1a;计算机视觉基础与基本原理 计算机视觉是人工智能领域的一个重要分支&#xff0c;旨在使计算机能够理解和处理图像和视频数据。随着深度学习技术的飞速发展&#xff0c;计算机视觉已经在许多实际应用场景中取得了显著的成果&#xff0c;如图像识别、目标检…...

unity游戏开发003:深入理解Unity中的坐标系

Unity游戏开发 “好读书&#xff0c;不求甚解&#xff1b;每有会意&#xff0c;便欣然忘食。” 本文目录&#xff1a; Unity游戏开发 Unity游戏开发深入理解Unity中的坐标系前言1. 坐标轴2. 左手坐标系3. 世界坐标系 vs. 局部坐标系4. 坐标变换5. 注意事项 总结 深入理解Unity中…...

伊索寓言两则

马和驴 马为自己精美的马具感到骄傲&#xff0c;在大马路上遇见了驴子子正驮着重担挪着步子&#xff0c;挡了路&#xff0c;马儿没法过去&#xff0c;就不耐烦叫道&#xff1a;真想踢你两脚&#xff0c;好让你走快点。驴子沉默不语&#xff0c;但没忘马儿的傲慢。不久后马儿患…...

嵌入式硬件产品开发:编码文件规则

目录 简介 文件内容的一般规则 文件名命名的规则 简介 一个工程是往往由多个文件组成。 这些文件怎么管理、怎么命名都是非常重要的。 文件内容的一般规则 【规则1】每个头文件和源文件的头部必须包含文件头部说明和修改记录。 源文件和头文件的头部说明必须包含的内容和次…...

设计模式 - 组合模式

💝💝💝首先,欢迎各位来到我的博客!本文深入理解设计模式原理、应用技巧、强调实战操作,提供代码示例和解决方案,适合有一定编程基础并希望提升设计能力的开发者,帮助读者快速掌握并灵活运用设计模式。 💝💝💝如有需要请大家订阅我的专栏【设计模式】哟!我会定…...

打靶记录11——Billu_b0x

靶机&#xff1a; https://download.vulnhub.com/billu/Billu_b0x.zip难度&#xff1a; 中&#xff08;两种攻击路线&#xff09; 目标&#xff1a; 取得root权限 涉及的攻击方法&#xff1a; 主机发现端口扫描Web信息收集SQL注入&#xff08;Sqlmap跑不出来&#xff09;…...

一、在cubemx上配置sd和fatfs示例演示

一、sd和fatfs的配置流程界面 1、选择sd4bits 根据自己的sd卡的硬件插槽进行选择。 2、fatfs配置由于使用的是sd卡所以直接选择sd选项 3、程序中对sd卡的初始化需要进行改动&#xff0c;直接使用默认的参数sd卡是挂载不上的。 4、在sd卡挂载好后&#xff0c;就可以使用文件系统…...

C++ 语言特性02 - 命名空间

一&#xff1a;概述 现代C中的命名空间是什么&#xff1f; C中的命名空间允许用户在命名空间范围内对类、方法、变量和函数等实体进行分组&#xff0c;而不是在全局范围内使用。这可以防止大型项目中的类、方法、函数和变量之间发生命名冲突。命名空间将开发人员编写的代码组织…...