背景:
在web应用中,我们经常使用黑白名单,在http://blog.csdn.net/troy__/article/details/39320699 中我们实现了一个 线程安全的针对全量请求的缓存机制 ,这种技术主要是用于黑白名单的全量更新。但是我们不能经常请求全量吧,网络和数据库都会累死,所以在此我们设计实现一个 针对增量请求的缓存机制 。全量请求提供黑白名单低频度的更新,增量请求提供黑白名单高频度的更新。当然,全量和增量的应用场景也并不只是黑白名单。设计概述:
使用缓存的关键之一是:缓存并不能保证实时性,但它提供的是曾经出现过的某个正确状态。(
csdn大量使用缓存,且失效时长过长,导致博客专区中很多操作执行后很久都得不到页面上的更新。)
在对实时性要求、缓存效果、实现难度、业务场景这四点的权衡和折中后,我选择了增量的缓存粒度为
1分钟。意思就是说对每个1分钟内的增量进行缓存的存储。
除此之外,我们
使用了AOP技术进行代码的复用,以及对业务代码的解耦,并且使用Annotation技术对增量方法进行标记。
详细设计:
- 增量请求并不是只对增加的数据进行更新,还要对以前删除的数据进行更新。所以应该返回两个List,一个是新添加数据的List,一个是已删除数据的List。
- 在实际工作中,在数据库层面,对于新增