InnoDB

InnoDB的架构设计

https://dev.mysql.com/doc/refman/8.0/en/innodb-architecture.html

innodb-architecture

由图可知,InnoDB主要分为两部分:

  • InnoDB In-Memory Structures
  • InnoDB On-Disk Structures
Read more
HandlerInterceptor

单用户限制接口请求频率

HandlerInterceptor

SpringMVC的处理器拦截器,类似于Servlet中的过滤器filter。

public interface HandlerInterceptor {

/**
* 预处理回调方法,实现处理器的预处理(如检查登陆),第三个参数为响应的处理器,自定义Controller
* 返回值:true表示继续流程(如调用下一个拦截器或处理器)
* false表示流程中断(如登录检查失败),不会继续调用其他的拦截器或处理器,此时我们需要通过response来产生响应;
*/
boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception;

/**
* 后处理回调方法,实现处理器的后处理(但在渲染视图之前),
* 此时我们可以通过modelAndView(模型和视图对象)对模型数据进行处理
* 或对视图进行处理,modelAndView也可能为null
*/
void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception;

/**
* 整个请求处理完毕回调方法,即在视图渲染完毕时回调,
* 如性能监控中我们可以在此记录结束时间并输出消耗时间,还可以进行一些资源清理,
* 类似于try-catch-finally中的finally,但仅调用处理器执行链中
*/
void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception;
}
Read more
SomeSynchronizationTool

同步工具

作用
Semaphore 限制线程的数量
Exchanger 两个线程交换数据
CountDownLatch 线程等待直到计数器减为0时开始工作
CyclicBarrier 作用跟CountDownLatch类似,但是可以重复使用
Phaser 增强的CyclicBarrier
Read more
CopyOnWrite

CopyOnWrite容器简介

可以理解为写时复制的容器,当向容器中添加元素时,不是直接往容器中添加,而是将当前容器进行copy,复制出一个新的容器,然后向新容器中添加元素,最后将原容器的引用指向新容器。

好处:在并发的场景下对容器进行”读操作”而不需要”加锁”,从而达到读写分离的目的。

从JDK 1.5 开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,分别是CopyOnWriteArrayList和CopyOnWriteArraySet。

Read more
AQS

简介

是AbstractQueuedSynchronizer的简称,是一个用来构建锁和同步器的框架,比如ReentrantLock,Semaphore,ReentrantReadWriteLock,SynchronousQueue,FutureTask等等皆是基于AQS的。

Read more
Redis

Redis为什么这么快

  1. 完全基于内存,绝大部分请求是纯粹的内存操作;
  2. 数据结构简单,Redis中的数据结构是专门进行设计的;
  3. 采用单线程,避免了不必要的上下文切换和竞争条件;
  4. 使用多路I/O复用模型,非阻塞IO;
  5. Redis构建了自己的VM机制,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求;
Read more