基于方法的切片缓存插件 Aspect-Cache-Plug

GPL
Java
跨平台
2016-05-06
yy_yxp

Aspect-Cache-Plug

先介绍缓存使用下场景
对同一请求(针对不同请求参数)进行缓存,可以减少服务器压力、加快响应速度

查询接口:根据请求条件对返回结果进行缓存
更新接口:根据条件对指定缓存进行清除

@Aspect(key = "query")
public Object query(String q) {
  // do something
  return null;
}
@Aspect(key = "update")
public Object update(String q) {
  // do something  
  return null;
}

缓存query方法返回值

<bean class="com.aspect.config.CacheConfig">
    <property name="key" value="query"/>
    <property name="space" value="space2"/>
    <property name="keyExpression">
        <value>this[0]+new java.util.Date()</value>
    </property>                 
    <property name="timeout" value="60"/>
</bean>

执行update时清除query的返回结果

<bean class="com.aspect.config.ClearConfig">
    <property name="key" value="update"/>    
    <property name="cachedConfigs">
        <list>
            <value>query</value>
        </list>
    </property>
</bean>

加入spring支持

<aop:config> 
        <aop:pointcut id="adviceAspectPoint" expression="execution(* com.sample..*.*(..)) and @annotation(Aspect)" /> 
        <aop:aspect ref="adviceAspect"> 
            <aop:around method="execute" pointcut-ref="adviceAspectPoint" arg-names="Aspect" />
        </aop:aspect> 
    </aop:config>

    <bean id="adviceAspect" class="com.aspect.AdviceAspect">
        <property name="rootKey" value="aspect.cache."/>
        <property name="cache" ref="cache"/>
        <property name="caches">
            <list>
                <bean class="com.aspect.config.CacheConfig">
                    <property name="key" value="queryMethod1"/>
                    <property name="space" value="space1"/>
                    <property name="keyExpression">
                        <value>this[1]+"."+this[2]</value>
                    </property>
                    <property name="domainExpression">
                        <value>this[0]</value>
                    </property>
                    <property name="timeout" value="60"/>
                </bean>
                <bean class="com.aspect.config.CacheConfig">
                    <property name="key" value="queryMethod2"/>
                    <property name="space" value="space1"/>
                    <property name="keyExpression">
                        <value>this[0]</value>
                    </property>                 
                    <property name="timeout" value="60"/>
                </bean>
                <bean class="com.aspect.config.CacheConfig">
                    <property name="key" value="space2QueryMethod1"/>
                    <property name="space" value="space2"/>
                    <property name="keyExpression">
                        <value>this[0]+new java.util.Date()</value>
                    </property>                 
                    <property name="timeout" value="60"/>
                </bean>
            </list>
        </property>
        <property name="clears">
            <list>
                <bean class="com.aspect.config.ClearConfig">
                    <property name="key" value="updateMethod1"/>
                    <property name="domainExpression">
                        <value>this[0]</value>
                    </property>
                    <property name="cachedConfigs">
                        <list>
                            <value>queryMethod1</value>
                            <value>space2QueryMethod1</value>
                        </list>
                    </property>
                </bean>
            </list>
        </property>
    </bean>
加载中

评论(0)

暂无评论

暂无资讯

暂无问答

能否让 Cache 变得更加优雅?

本文是《轻量级 Java Web 框架架构设计》的系列博文。 之前实现了一个简单的 Cache 插件,主要用于 Service 层,为了减少数据库的访问次数,将数据放入 Cache 中缓存起来。在 Service 中直接...

2013/11/04 12:14
2.3K
2
Cache Plugin 实现过程

本文是《轻量级 Java Web 框架架构设计》的系列博文。 前几天写过一篇文章,关于如何实现 Cache Plugin,错过的朋友可以看这篇:《能否让 Cache 变得更加优雅?》。 今天,我想和大家分享一下...

2013/11/07 20:56
2.2K
1
BTrace

Sometimes you need to audit or profile your Java application. The easiest but most intrusive way to do this is to do a bunch of System.out.printlns (which is obviously bad) or t...

2014/03/14 11:18
70
0
mybatis整合memcache

mybatis官方出了对memcache的整合,使mybatis也可以使用分布式缓存,除了memcache外还有个Hazelcast的整合包

2014/08/15 16:35
6.1K
2
智能设备的连接与开发:通用开放终端API

以下内容摘自“设备网页API联盟”关于GotAPI的相关介绍。GotAPI是由OMA开发的标准,而设备网页API联盟则注重与对该标准的研究,推广与运用。这篇文章很具体的极少了GotAPI标准所能实现的功能...

2015/09/04 06:47
13
0
注解和AOP的方式使用Redis

在Spring Framework中,默认提供的@Cache系列Annotation,比较死板,不能适应redis的多数据结构,但其SPEL的方式,非常值得借鉴。所以自定义了@RedisCache annotation,并且可以使用SPEL,以...

2016/12/02 18:30
50
0
Phoenix官方教程 (四) Plug

Plug生活在Phoenix的HTTP层的心脏中,而且Phoenix将Plug放在首要位置。我们的连接循环中的每一步都离不开plugs,Phoenix的核心组件,类似Endpoints,Routers,和控制器,本质上都是Plugs。让...

2016/08/16 11:25
649
0
【FAQ合集】TWAIN扫描识别工具Dynamic Web TWAIN的特性问题

Dynamic Web TWAIN中文介绍丨免费下载丨资源教程丨示例DEMO 慧都十四周年狂欢开启,Dynamic Web TWAIN终极让利7折特惠,限时一个月,马上咨询>>> 1. Dynamic Web TWAIN可以使用哪些操作系统?...

2017/11/08 11:25
13
0
python - summary with code on Python Dictionary...

in this post, we are going to to discuss the essentials of the dictionary of Python. Dictionary provide some constant operation to retrieval or store some value based on the key...

2012/11/01 21:38
62
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部