最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

【全球热闻】真实项目开发中高并发实战经验总结

来源:博客园


(资料图)

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类型存储,处理起来方便又快捷。 如果有其他建议的小伙伴,欢迎留言讨论。

关键词: 可以考虑 任务处理 定时任务