这是我参与更文挑战的第2天,活动详情查看: 更文挑战
最近查看公司代码的时候发现个之前不熟悉的地方-->监听事件,下面我来说道说道
首先说下 为什么要弄这个监听,因为我们系统在项目启动的时候有个加载的过程,就是将库表中所有的规则型数据加载到本地的缓存中,咦,搞事情嘛,这家伙通用的数据啊,为啥要放本地,还好我爱学习,翻了SVN上的性能文档。
此处是题外话:
-为什么放本地缓存,这样服务器不是都得备份一份吗,沙雕行为吧;放redis不香吗;一份解决所有,不好意思,在前辈们不停测试分析结果后总结,由于我们是中台项目,主要处理的操作就是规则分析,如果将规则缓存放到redis中,由于每次分析都需要去请求网络取数据,一条没事,万一来个文件里面有一万条数据,那么我们需要向网络请求一万次,毫无办法,大部分时间都会花在请求数据上,而不是我们期望的分析数据上,前面就说了我们是中台项目,主要就说分析数据。
不知道大家想的是不是直接存缓存list也好,map也好,这些都不是最优解,是的,就是标题说的那个ehcache,我们先来看看官方对他的解释吧:
EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider
官方很自信的用了最广泛使用的缓存,我怕机翻错误,特意又转英文看了一下
JAVA’S MOST WIDELY-USED CACHE
主要的特性有:
1. 快速
2. 简单
3. 多种缓存策略
4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题
5. 缓存数据会在虚拟机重启的过程中写入磁盘
6. 可以通过RMI、可插入API等方式进行分布式缓存
7. 具有缓存和缓存管理器的侦听接口
8. 支持多缓存管理器实例,以及一个实例的多个缓存区域
9. 提供Hibernate的缓存实现
这个对于单机使用非常友好,毕竟Hibernate都使用它,(可能大家都被mybatis刷屏了吧,哈哈哈),有人可能会问,如何保证数据一致性的问题,为此,我特意去请教了一下大佬,大佬回家很简单,没有保证一致性,只是对于不常使用的update,会有一台服务器来处理,缓存一致性是一个很大的问题随着规则逻辑的增加,势必会朝着分布式缓存发展。
可能很不解我的想法,既然大趋势是分布式,为什么还要ehcache呢,原因官方的首页已经给了,但我估计很多人都不知道这个吧,技术服务于业务,不是最新的就是最好的,就像谈恋爱,适合的才是最好的,就还比如,我们也用mq,但是。。。
我们的订阅发布用的是redis,哎,你看,我都有,我就是不按套路出牌,哎;就是玩!!!
最后,所有的技术选型都是经过很多次的测试决定的,这么选择一定是特殊环境下的最优解;
官方文档有很详细的教程,所以这次就不上案例了,本篇只是探索发现,也算一个技术选型的可选参数,共同学习吧!!!给缓存绊住了,下次说监听
*****************撒花完结*********************