首页 > 其他分享 >真实项目开发中高并发实战经验总结

真实项目开发中高并发实战经验总结

时间:2023-02-16 22:11:52浏览次数:42  
标签:总结 缓存 数据 接口 并发 实战经验 更新 使用 比如

1、使用异步多线程的方式记录详细的请求日志;使用异步多线程的方式记录接口请求调用量;
2、不同类型的接口采用不同的限流设置,比如后台管理系统和对外接口采取不同的限制设置;
具体的可以根据项目中实际的需求进行配置,一般后台管理系统限流数可以设置小一些,对外接口限流数设置大一些;
3、对内的接口比如后台管理系统,和对外的接口比如提供的开放接口,根据不同的路径来拦截;采用不同的拦截器进行通用逻辑处理,
比如记录日志(后台管理系统)和接口调用量统计(对外接口)等等;
4、主表的数据一般使用都比较频繁,可以考虑使用定时任务更新到redis缓存中,如2分钟更新一次,使用的时候直接从缓存中获取;
5、其他使用频率比较高的数据,比如字典表数据或者是其他业务表的数据,同主表数据一样使用定时更新到缓存中,
比如三分钟更新一次;使用时直接从缓存中获取;
6、一些耗时的任务处理,比如生成多个二维码并且将二维码合成到不同的图片中的操作;可以考虑使用多线程或者是异步线程处理都行;
7、高频率使用的数据,有的人称之为热点数据,比如首页需要使用的数据;全部从缓存中获取,然后使用定时任务定时高频率更新这些缓存中的数据;
8、数据量比较大的时候,导致查询效率降低,考虑使用分表,使用Mybatis的拦截器可以直接替换表后缀名,分表查询时很方便;
9、某些接口的操作如果是新增或者是更新,比如先根据条件查询某条数据是否存在,存在则进行更新,不存在则新增;
这种情况可以考虑将新增操作和修改操作合并为一条SQL,不存在新增,存在则更新;mysql数据库或者是postgresql都提供这种操作方式;
10、某些高频率数据更新操作,可以先将数据放入redis缓存中,然后在使用其他线程,比如使用定时任务从缓存中获取之前存入的数据,
进行后续处理,比如更新到mysql数据库或者是新增到mysql数据库;
11、数据表设计的时候,所有表全部添加版本号字段,使用乐观锁的设计方式,提高数据库并发量;
12、所有表均创建有合适的索引,有普通索引,唯一索引,组合索引,普通组合索引,唯一组合索引等等,加快数据库查询效率;
13、服务使用多实例部署;网关服务使用多实例部署,后端服务也是多实例部署;redis服务采用集群部署,postgresql数据库也是集群部署;
提升服务器性能和提高并发量。
14、简单顺序任务处理直接使用redis创建的队列,不使用MQ消息队列;
15、一些不太复杂的业务处理,设计表的时候可以直接考虑使用JSON类型数据格式,单个字段中又可以包含多个字段,
这样就可以少创建一些表,提升系统处理效率。比如某个业务表只有两三个字段,通过其他表的主键来进行关联,
这时就可以考虑将这张表中的数据直接存储为其他表的一个字段,用JSON类型存储,处理起来方便又快捷。
如果有其他建议的小伙伴,欢迎留言讨论。

标签:总结,缓存,数据,接口,并发,实战经验,更新,使用,比如
From: https://www.cnblogs.com/yilangcode/p/17128487.html

相关文章

  • 一文总结当下常用的大型 transformer 效率优化方案
    前言本文是一篇综述性的博客,探讨总结当下常用的大型transformer效率优化方案。 本文转载自机器之心作者丨LilianWeng欢迎关注公众号CV技术指南,专注于计算机......
  • QT基础学习 - 总结
    一、学习规划与必要知识点总结1、QT的下载与安装;1)下载:进入官网,下载QT在线下载工具(QT5.15后都必须在线下载):2)安装参考博客: a. (86条消息)Windows10在线安装Qt5.15和......
  • 线程池总结
    一、什么是线程池,为什么需要线程池池化思想在计算机领域并不少见,在SQL连接,TCP链接中也常常见到,本质思想都是一样的,就是资源复用,线程池也差不多就是这个道理,它将多个线程资......
  • 偏序问题总结
    首先既然讲的是偏序问题,先说明一下偏序关系的概念:偏序关系符号为\(\prec\),是一种满足自反性,反对称性和传递性的关系。好叭我承认上面那个定义不是人可以理解的,这里我对......
  • 嵌入式开发之编程---并发编程
    https://www.cnblogs.com/pengkunfan/p/13530990.html并发历史在计算机最早期的时候,没有操作系统,执行程序只需要一种方式,那就是从头到尾依次执行。任何资源都会为这个程......
  • .NET 中的并发编程
    今天我们购买的每台电脑都有一个多核心的CPU,允许它并行执行多个指令。操作系统通过将进程调度到不同的内核来发挥这个结构的优点。然而,还可以通过异步I/O操作和并行处理......
  • C#/.net面试知识点总结(三)【值类型与引用类型】
    C#中什么是值类型与引用类型?值类型:struct、enum、int、float、char、bool、decimal引用类型:class、delegate、interface、array、object、stringC#中堆和栈的区别?栈:......
  • C#/.net面试知识点总结(三)【委托】
    委托是什么?事件是不是一种委托?委托可以把一个方法作为参数带入另一个方法。委托可以理解为指向一个函数的指针。C#的委托是CTS(公共类型系统)规定的5种类型之一。(类类型......
  • 【数据结构复习】部分知识提纲/总结
    7.2图的存储结构7.4图的连通性问题最小生成树生成树条件:全部顶点部分边无回路最小生成树:权最小的生成树点:prim任取一个点,进入解集对解集画圈,找与圈连接的......
  • 5. Java并发
    什么是线程和进程?何为进程?进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。在Java中,......