首页 > 其他分享 >1月11日总结

1月11日总结

时间:2024-01-15 22:12:44浏览次数:28  
标签:11 总结 缓存 String 租户 组装 private 部门

在最近的开发中,一星期内遇到了两个类似的需求:返回组装好的部门树、返回组装好的地区信息树,最终都需要返回 List 集合对象给前端。

于是在经过需求分析和探索实践后,我对于这种基于 Stream 和 List 结构的父、子树形结构的操作有了新的认识,现在拿出来和大家作分享交流。

一般来说完成这样的需求大多数人会想到递归,但递归的方式弊端过于明显:方法多次自调用效率很低、数据量大容易导致堆栈溢出、随着树深度的增加其时间复杂度会呈指数级增加等。

核心思路如下:

一次数据库查询全部数据(几万条),其它全是内存操作、性能高;

同时熟练使用 stream 流操作、Lambda 表达式、Java 地址引用,完成组装;

使用缓存注解(底层Redis分布式缓存实现),过期后自动更新缓存,再次调用接口则先命中缓存,没有的话再查数据库

使用RocketMQ来做异步通知更新,即当数据有更改时,可以异步将数据先更新,再写入缓存,使业务更合理,考虑更全面

一、以部门结构为例

这里的实体是放在 MySQL 里的,使用简单的封装好的查询语句,这个很简单,剩下的就是内存操作了。
1.1实体

租户表:租户就是一个组织或者公司,所以每个租户都有自己的部门。下面的表结构我只列了一些核心的字段,其它不重要。

@Data
public class PmTenant {
/**
* 主键Id
/
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/
*
* 租户名称
/
private String tenantName;
/
*
* 租户唯一编码,对外暴露
/
private String tenantCode;
/
*
* 租户Id
/
private String tenantId;
/
*
* 租户状态,0可用,1禁用
*/
private Integer status;
}

部门表:公司里都会有许多的部门,一个部门里还有部门。从最顶层公司到你所在的的部门,可能会有多达六、七层。以下同样只展示核心字段:

@Data
public class PmDept {
/**
* 主键id

标签:11,总结,缓存,String,租户,组装,private,部门
From: https://www.cnblogs.com/lmyy/p/17966494

相关文章

  • 1月10日总结
    在组织结构:团队成员40人左右,业务特点:有大量老服务、流量波动大(峰值集中在中午和傍晚)、流量不可预测。背景:以业务发展为主,对稳定性关注较少,各项目使用的规范和工具不一致,两年台出了几次事故,开始重视稳定性建设,成立稳定性保障小组,推动稳定性工作。稳定性小组的组成:img稳定性保障......
  • 1月15日总结
    好呀,我是歪歪。Spring的事件监听机制,不知道你有没有用过,实际开发过程中用来进行代码解耦简直不要太爽。但是我最近碰到了一个涉及到泛型的场景,常规套路下,在这个场景中使用该机制看起来会很傻,但是最终了解到Spring有一个优雅的解决方案,然后去了解了一下,感觉有点意思。和你一......
  • 1月14日总结
    果用到动态代理,大家可能会有几种选择,排到前列的是Autofac+Castle、AspectCore和DoraInterception,我将从我当时研究的经历,以及我遇到的场景,为大家展示下聊一聊我为什么要费时费力的整合Microsoft.Extensions.DependencyInjection和Castle.Core当时遇到的场景直接上源码public......
  • 微信小程序测试点,9大方面全方位总结
    微信小程序无需下载安装,用户在微信扫一扫或搜索即可使用,小程序版本类型可分为:开发版、体验版、正式版。开发版、体验版无需审核,只需要给微信号权限,经过扫小程序的二维码就能访问,正式版本需要经过微信审核才可使用。下面从9个方面,总结下微信小程序的测试点:1、功能:与Web和App......
  • MySQL常规(总结)
    1.exist和in的区别1.1select*fromA whereidin(selectidfromB)in 先查询子表,再查询主表,不管子查询是否有数据,但是in只执行一次,查出B表中的所有id字段并缓存起来,检查A表的id是否与B表中的id相等,直到遍历完A表所有记录,所以当子查询数据较大时不适合使用in,因为它会将子......
  • stm32笔记[11]-驱动SSD1306屏幕
    摘要在蓝桥杯物联网的CT127C开发板上驱动SSD1306的0.91寸显示屏.平台信息KeilMDK-ARM(μVision)V5.35.0.0STM32CubeMX6.2.1原理简介CT127C开发板简介蓝桥物联网竞赛实训装置省赛训练套装,适用于蓝桥杯大赛(电子类)物联网设计与开发科目竞赛训练及高校日常教学实训环......
  • 2024省选联测11
    A.Giao徽的烤鸭给定一棵树,边权为\(1\)。在第\(i\)家店办卡花费\(w_i\)元。对于任意一家店,如果Giao徽在到\(i\)的距离小于等于\(p\)的所有店办了卡,可得到\(v_p\)元的代金券。求最大利润。\(f_{u,i}\)表示在以\(u\)为根的子树中,到\(u\)距离小于等于\(i\)......
  • webpack,babel配置项目适配IE11
    package.json"browserslist":["ie11"] webpack.config.jsconstpath=require('path')consthtmlWebpackPlugin=require('html-webpack-plugin')const{CleanWebpackPlugin}=require('clean-webpack-......
  • 如何做好一个信息系统项目经理,一个项目经理的个人体会和经验总结(一)
    作为一个信息系统项目经理,最要紧的就是要明白什么是因地制宜、因势利导,只有最合适的,没有什么叫对的,什么叫错的;最忌讳的就是完美主义倾向,凡事都要寻找标准答案和最优答案,既耽误了项目进度,也迷茫了自己。以下是本人一些做信息系统项目的个人体会和经验总结,写出来供大家指点,在讨论过......
  • 聚类算法学习总结
    1.1聚类的定义聚类(Clustering)是按照某个特定标准(如距离)把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。也即聚类后同一类的数据尽可能聚集到一起,不同类数据尽量分离。1.2聚类和分类的区别......