原创声明:本文纯属原创,如需转载,请指明出处git
关于缓存框架,本人早年在一些中小型项目中本身用Map封装过一个进程内的本地缓存方案。后来陆续用过ehcache、及memcache等特定厂商实现的缓存。他们之间没有太大的可比性,由于各自都有本身的特色和优劣。而因业务场景的复杂多变,让我开始考虑在同一个应用系统中可否同时使用不一样的缓存实现。spring
然而,若是直接使用每一个缓存厂商本身的api来实现这种需求,将会使得业务代码与缓存操做的在代码混在一块儿,可移值和可维护性都不好。为了解决可移值性问题,spring3给出了一种经过注解的方式来统一api,spring3的缓存模块,除了给出了一种基于Map的内存实现外,并无其它的具体实现,须要用户本身配置一个特定缓存实现的缓存管理器。数据库
然而,spring的support包中只提供ehcache等少数几种缓存的缓存管理器实现。对于诸如memcache等缓存,仍是要本身实如今缓存管理器。并且还有诸如当数据库中没有数据时,由于没有缓存null值,致使每次从都数据库中查询引发缓存穿透现象,还有诸如,当memcache挂掉时,若是暂停使用缓存等等。再如,如何要为同一种类型的不一样实例在缓存中缓存存活时间不同等等这种个性化的需求spring框架并无很好的支持,须要本身实现。api
从本周开始,将陆续经过文档展现一个本身实现的通用缓存框架,知足上述全部需求,总结以下:缓存
一、提供统一的缓存操做api(包括注解以及相应的工具类)。服务器
2、支持同时使用多种缓存实现。这样作可适用的一个业务场景就是:如在某游戏系统中能够经过配置将会员信息缓存到分布式部署的memcache缓存中,而将会员后台界面中的权限菜单缓存在本地ehcache缓存或者干脆放到基于Map的内置缓存中(会员只能在同一个服务器登陆,所以好比权限菜单之类的数据不必缓存到分布式缓存容器中)。微信
3、提供灵活的配置。全部须要缓存的数据都经过配置实如今具体使用什么缓存,并能够随时经过修改配置进行切换。框架
4、须要防止缓存穿透。以便在数据库中没有数据时,因缓存没法命中而每次都查询数据库。分布式
5、须要能够灵活指定缓存存活时间。好比让某些比较重要的会员在缓存中存久一点,而让某些不重要的会员在缓存中存短一点。工具
6、须要任意控制缓存的停用或启用。好比,在使用memcache缓存时,memcache服务器尚未搭建好,能够先在应用层上暂停使用缓存,等memcache服务器正常了,再启用缓存。
知足以上需求的通用缓存框架,本人已经基本实现,目前处于测试和写文档阶段。
目前JAD-CACHE项目已在开源中国码云平台上开源,地址:
https://git.oschina.net/457049726/jad-cache
想了解更多信息或者想及时知道进展的同窗们能够扫描如下二维码关注本人的微信公众号,多谢。
欢迎扫码关注本人微信公众号以获取最新进展及更多信息