最近几天由于工作原因,需要设计实现一个线程安全的缓存机制,拿出来和大家分享交流一下。
应用背景:
缓存是在实际工作中经常用到的,主要作用呢?1. 提高响应速度 2. 降低cpu压力或者数据库压力。
在此,我的应用背景是拦截一些RPC请求(
不要求获取实时数据),且RPC请求无参数,即主要是应对一些数据全量同步的请求(那么缓存的key是请求的函数名,value是返回值)。提供缓存实现,以降低数据库及自身应用的访问压力。
目标:
高可扩展性:可以方便配置需要使用缓存的方法。
线程安全性:在并发情况下,要求线程安全,且尽可能高效。
使用技术:
- 使用AOP的插件性质来降低缓存与原系统的耦合性,即在切面层做缓存的处理。
- 使用Annotation来对需要做缓存处理的函数进行标记,并可以对缓存时间个性化
- 针对缓存过期问题,对放入缓存的数据封装一层,并打上时间戳
示意图:
设计难点:
针对某一时刻并发数较多且缓存失效的情况下,我们应该保证的是只有一个线程会去执行数据的读取并设置的操作,那么其