AutoLoadCache 是基于AOP+Annotation等技术实现的高效的缓存管理解决方案,实现缓存与业务逻辑的解耦,并增加异步刷新及“拿来主义机制”,以适应高并发环境下的使用。
APACHE-2.0 License
Bot releases are visible (Hide)
Published by qiujiayu almost 8 years ago
增加对 JedisCluster 的支持
Published by qiujiayu about 8 years ago
内部线程在关闭时没有清理干净
自定义OGNL函数时,替换字符串bug修改
Published by qiujiayu over 8 years ago
4.0 实现AOP的可扩展
受网友Rekoe 将AutoLoadCache 和 nutz整合的启发(https://github.com/Rekoe/AutoLoadCache),将AutoLoadCache 中的AOP相关功能进行抽取,以达到可扩展
Published by qiujiayu over 8 years ago
调整 写缓存(writeCache)代码结构。
将ShardedCachePointCut中hashExpire默认值设置为-1;
解析SpEL表达式时,增加判断是否有返回值,避免在不能使用#retVal的地方,使用了#retVal
Published by qiujiayu over 8 years ago
使用当前的ProcessingTO 实例来做同步锁,把锁粒度降到了最低,以提升并发性能;
删除并发线程的计数器;
如果第一个线程执行时出现异常,那等待中的线程,也直接抛出异常,因为此时去执行DAO的出错的可能性非常大,会造成服务器压力过大。
Published by qiujiayu over 8 years ago
“拿来主义”机制指的是,当有多个请求去获取同一个数据时,我们先让其中一个请求先去DAO中获取数据,并放到缓存中,其它请求则等它完成后,直接去缓存中获取数据,通过这种方式减轻DAO中的并发。
但经测试发现,刚往Reids中放的数据,立即去取是获取不到数据的(无法命中),测试代码已经放到[cache-example](https://github.com/qiujiayu/cache-example) 中。优化后的方案是,不从远程服务器获取,而是从本地缓存中获取第一个请求返回的数据。减少并发的同时,还能减轻网络压力。
3.0 此版本做了大调整,有些功能已经不兼容老版本
不再使用默认缓存Key,所有的缓存都必须自定义缓存Key;原来使用$hash()来调用hash函数,改为使用#hash()进行调用。
之前版本中使用通配符(?和*)进行批量删除缓存,这种方法性能比较差,需要多次与Redis进行交互,而且随着缓存Key的数量的增加,性能也会下降,如果有多个Reids实例的话,还需要遍历每个实例。为了解决这个问题,我们使用hash表保存需要批量删除的缓存,要批量删除缓存时,只要把hash表删除就可以了。
如果在开发阶段不想使用Redis来缓存数据,可以使用com.jarvis.cache.map.CachePointCut,把数据缓存到本地内存中,虽然它不支持使用通配符进行批量删除缓存,但同样支持使用hash表进行批量删除缓存。所以转用Redis缓存数据是没有任务问题的。
如果需要在MyBatis Mapper中使用@Cache和@CacheDelete,则需要使用com.jarvis.cache.mybatis.CachePointCutProxy 来处理。
Published by qiujiayu about 9 years ago
增加namespace,隔离系统之前的数据
Published by qiujiayu over 9 years ago
1:使用@CacheDeleteKey 定义删除缓存Key的规则;
2:@Cache中增加opType属性,支持把执行结果直接更新到缓存中,不从缓存取数据。
3:使用Lua脚本批量删除Redis缓存。
详细的使用,可以参考:https://github.com/qiujiayu/cache-example 中的UserDAO。
Published by qiujiayu over 9 years ago
添加 ShardedCachePointCut,使用 ShardedJedisPool 来进行访问Redis
Published by qiujiayu over 9 years ago
增加@CacheDelete,实现通过AOP进行删除缓存。
Published by qiujiayu over 9 years ago
变更记录:
1:@Cache 中增加 autoloadCondition ,用于动态设置autoload值;
2:把CacheGeterSeter 更名为 ICacheManager;
3:增加AbstractCacheManager抽象类,并将CachePointCut类改为继承此类;以便于实现一个工程中,使用多个缓存aop配置。
4: <aop:around pointcut-ref="..." method="proceed" /> 中method 值改为 "proceed";
5:增加AdminServlet,在页面中打印自动加载队列所有内容,同时增加删除缓存等功能。
6:往redis set 数据方法变更,使用setEx方法代替 set + expire,提升操作性能;
Published by qiujiayu over 9 years ago
1:加载数据之前去缓存服务器中检查,数据是否快过期
2:记录AutoLoadTO中的,第一次请求数据时间,和总的请求次数;
3:将使用率比较低的数据,从自动加载队列中移除;
4:删除缓存时,重置AutoLoadTO中的上次加载时间,让应用尽快去自动加载,而不是等用户下次请求。
Published by qiujiayu over 9 years ago
优化等待机制,减少去缓存服务器尝试取数据。
增加自动加载配置类,进行管理配置。
Published by qiujiayu over 9 years ago
autoload-cache-0.4
1:增加自动加载队列排序;
2:增加Redis支持
3:增加Memcache 支持
Published by qiujiayu over 9 years ago