摘要:
接口优化过程记录 问题背景 某个接口耗时长(247ms),但里面逻辑不算复杂,只进行了简单的对象引用以及操作了多次Redis 步骤1:链路追踪,确定业务耗时点 接口里通过链路追踪以及日志查询发现主要是操作Redis的这条链路耗时变长 步骤2:从Redis找问题,列出可能点 原因可能是: Redis本 阅读全文
摘要:
使用OOP消除重复代码 假设银行提供了一些API接口,对参数的序列化有点特殊,不使用JSON,而是需要我们把参数依次拼在一起构成一个大字符串。 按照银行提供的API文档的顺序,把所有参数构成定长的数据,然后拼接在一起作为整个字符串。 因为每一种参数都有固定长度,未达到长度时需要做填充处理: 字符串类 阅读全文
摘要:
通过设计模式消除ifelse和重复代码 使用该方法前,先来了解一下工厂模式以及模板方法模式 工厂模式(创建型模式) 工厂模式分为3种 简单工厂模式(Simple Factory Pattern) 工厂方法模式(Factory Method Pattern) 抽象工厂模式(Abstract Facto 阅读全文
摘要:
title : webflux延迟队列逻辑更改过程记录 author : simonLee date : 2022/11/22 10:26 webflux延迟队列逻辑更改过程记录 一、问题背景 一个业务使用了webflux.delayElement(Duration delay)来发送延迟消息,由于 阅读全文
摘要:
Redis锁的使用 起因:分布式环境下需对并发进行逻辑一致性控制 架构:springboot2、Redis IDEA实操 先新建RedisLock组件 注:释放锁使用lua脚本保持原子性 @Component @Slf4j public class RedisLock { private final 阅读全文
摘要:
MongoDB海量数据分页查询优化 一、背景 大量数据需从Mongo拿出来,一次性拿出来不科学,传统分页效率低下 二、传统方案 就是最常规的方案,假设 我们需要对文章 articles 这个表(集合) 进行分页展示,一般前端会需要传递两个参数: – 页码(当前是第几页) – 页大小(每页展示的数据个 阅读全文
摘要:
Springboot配置多Redis源 一、背景 因项目部署了新集群,某些缓存数据需要在旧的redis上取,就必须配置多个数据源动态获取相对应的源以兼容业务。 二、配置依赖 <dependency> <groupId>org.apache.commons</groupId> <artifactId> 阅读全文
摘要:
同步锁实现 一、背景 在并发场景下,需要单一线程或限定并发数操作某些逻辑,这时候就需要用到一个锁来保证线程安全。 二、思路 使用ConcurrentHashMap实现,但只支持同一个jvm下的线程(暂时满足) 使用Semaphore信号量作为锁 数量操作都使用java原子操作类,例:AtomicIn 阅读全文
摘要:
Springboot优雅进行字段检验 1、Controller VS Service 推荐与业务无关的放在controller层中进行校验,而与业务相关的放在service层中校验。 2、常用校验工具类 使用Hibernate Validate 引入依赖 <dependency> <groupId> 阅读全文
摘要:
Map的常用方法 案例1 场景:一张建行用户体验金信息大表(百万级别),里面存在一个字段对多条数据,需要统计某个字段的多条数据累加值以供于别的服务调用。 优化前解决:直接查出来一个大list给到另一个服务,再另外一个服务里有笛卡尔积算出累加值(笛卡尔积后得到jvm需运算56亿次),程序直接接近崩溃, 阅读全文