Skip to content

【源码】优秀设计思想

设计模式

适配器

将GlobalGatewayFilter统一转换为GatewayFilter,使用适配器模式,
GatewayFilterAdapter实现了GatewayFilter接口,并接收一个GlobalGatewayFilter作为成员变量,这样子使用GlobalGatewayFilter就可以跟使用GatewayFilter一样,通过GatewayFilterAdapter去调GlobalGatewayFilter

责任链+策略模式

SpringMVC中匹配handler的适配器,并通过适配器进行执行handler,SpringGateway中同理用到

空间时间转换

空间换时间

Redis中每个db中会把相关的key单独存储,比如设置了过期时间的,阻塞命令操作的等,这样想要操作这些数据的时候就不用从所有key-value中去过滤
JVM分代,垃圾回收不用一次扫描整个堆

时间换空间

Redis的zipList

分片

竞争激烈,并发高处理同步,考虑使用分片,减少冲突
ConcurrentHashMap分段
Kafka分区

自旋手段

Thread.yield()

1.8ConcurrentHashMap在控制多线程下只有一个线程进行初始化时,针对无法参与初始化的线程采用Thread.yield来实现自旋

Semaphore

Redisson在加锁失败时,通过Semaphore来实现自旋,加锁成功的获取信号量,加锁失败的需要等到信号量释放后才开始

线程

daemon线程

Kafka客户端的消息发送线程