- 浏览: 191681 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
shinestmt:
Oracle取getColumnLabel全部都是大写的
使用ResultSetMetaData获取map结果集
Aop+memcached缓存的实现
memcache的安装请参考:
http://www.linuxidc.com/Linux/2012-03/56500.htm
首先定义两个注解类,来说明是插入缓存还是删除缓存,这两个类可以在方法上来对你service需要进行缓存的方法进行注解标记,注解类内用key的前缀和缓存的有效时间,使用aop拦截service层含有这两个注解的方法
代码:
Cache注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface Cache{
String prefix();//key的前缀
long expiration()default 1000*60*60*2;//缓存有效期2小时
}
Flush注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface Flush{
String prefix();//key的前缀
}
临时表用于存储key值:
表结构:
id --number(20) PRIMARY KEY
prefix--varchar(50)
cache_key--varchar(300)
add_time--datatime
memcache客户端代码,需要java_memcached-release_2.6.2.jar
public class Memcache{
static MemCachedClient client=null;
static{
String [] servers={CacheConstent.SERVERS};
SockIOPool pool=SockIOPool.getInstance();
pool.serServers(servers);
pool.setFailover(true);
pool.setMinConn(5);//最小连接数
pool.setMaxIdle(1000*60*60*6);//最大处理时间
pool.setInitConn(20);//初始连接数
pool.setMaxConn(250);//最大连接数
pool.setMainSleep(30);//主线程的睡眠时间
//设置TCP参数,连接超时等...
pool.setNagle(false);
pool.setSocketTO(3000);
pool.setAliveCheck(true);
pool.initialize();
client=new MemCachedClient();
client.setPrimitiveAsString(true);
}
public static Object get(String key){
return client.get(key);
}
public static boolean set(String key,Object obj){
return client.set(key,obj);
}
public static boolean set(String key,Object obj,Date ExpireTime){
return client.set(key,obj,ExpireTime);
}
public static boolean exists(String key){
return client.keyExists(key);
}
public static boolean delete(String key){
return client.delete(key);
}
public static Map<String ,Object>gets(String[] keys){
return client.getMulti(keys);
}
}
@Component
@Aspect
public class CacheAop{
private ICacheLogService cacheLogService;
@Resource(name="cacheLogService")
public void setCacheLogService(ICacheLogService cacheLogService){
this.cacheLogService=cacheLogService;
}
@Pointcut("execution(* com.test.service..*.*(..))")
public void cachedPointcut(){
}
@Around("cachedPointcut()")
public Object doAround(ProceedingJoinPoint call){
Object result=null;
Method[] methods=call.getTarget().getClass.getDeclaredMethods();
Signature signature=call.getSignature();
MethodSignature methodSignature=(MethodSignature)Signature;
Method method=methodSignature.getMethod();
for(Method m:methods){
if(m.getName().equals(method.getName())){
if(m.isAnnotationPresent(Cache.class)){
Cache cache=m.getAnnotation(Cache.class);
if(cache!=null){
String tempKey=this.getKey(method,call.getArgs());
String prefix=cache.prefix();
String key=prefix+"_"+tempKey;
result=Memcache.get(key);
if(null==result){
try{
result=call.proceed();
long expiration=cache.expiration();
Date d=new Date();
d=new Date(d.getTime()+expiration);
Memcache.set(key,result,d);
CacheLog log=new CacheLog();
log.setPrefix(prefix);
log.setCacheKey(key);
}catch(Throewable e){
e.printStackTrace();
}
}
}
}else if(method.isAnnotationPresent(Flush.class)){
Flush flush=method.getAnnotaion(Flush.class);
if(flush!=null){
String prefix=flush.prefix();
List<CacheLog>logs=cacheLogService.findListByPrefix(prefix);
if(logs!=null && !logs.isEmpty()){
int rows=cacheLogService.deleteByPrefix(prefix);
if(rows>0){
for(CacheLog log:logs){
if(log!=nul){
String key=log.getCacheKey();
Memcache.delete(key);
}
}
}
}
}
}else{
try{
result=call.proceed)();
}catch(Throwable e){
e.printStackTrace();
}
}
break;
}
}
return result;
}
private String getKey(Method method , Objectp[]args){
StringBuffer sb=new StringBuffer();
String methodName=method.getName();
sb.append(methodName);
if(args!=null && args.length>0){
for(Object arg:args){
sb.append(arg);
}
}
return sb.toString();
}
}
service层方法添加注解:
@Cache(prefix=CacheConstant.ANLI,expiration=1000*60*60*10)
@TRansactional(propagation=Propagaton.NOT)SUPPORTED,readOnly=true)
public Object find(String id){
......
}
发表评论
-
REDIS与MEMCACHED的区别
2014-03-01 22:23 696REDIS与MEMCACHED的区别 ... -
Spring与xFire结合开发WebService
2012-08-27 10:48 2901spring xfire是一种比较简单的webservci ... -
spring 的三种注入方式
2012-07-19 20:38 1128spring 的三种注入方式 1. 接口注入( ... -
iText工具类
2012-07-02 23:09 3538package com.bi.wms.fpn.util; ... -
JfreeChart生成折线图并保存为图片
2012-07-02 22:54 7851import java.io.File; imp ... -
dom4j读写xml文件
2012-07-01 15:13 850dom4j生成xml与解析xml 1、解析xml <?x ... -
iText中复杂布局表格单元格的创建
2012-07-01 14:51 8566package com.bi.wms.fpn.util; i ... -
iText生成PDF
2012-07-01 14:48 1099iText是著名的开放源码的站点sourceforge一个项目 ... -
@Autowired 与@Resource的区别
2012-05-27 01:22 1093@Autowired 与@Resource的区别: ... -
注解方式AOP应用例子
2012-05-27 01:15 934Service接口: public inte ... -
Spring mvc例子(Annotation方式)
2012-05-16 15:39 960本文主要介绍使用注解方式配置的spring mvc 文中 ... -
Spring事务
2012-05-16 10:01 449spring事务的传播行为是面试中经常被问到的问题,要将事务的 ... -
Spring原理
2012-03-23 18:51 762一、 IoC(Inversion of control): 控 ...
相关推荐
NULL 博文链接:https://leiwuluan.iteye.com/blog/1176120
一个通过注释在Spring bean中启用memcached缓存的嵌入式库。 大多数文档已移至github,但仍有一些文档仅在上可用。 介绍 当广泛使用分布式缓存时,它可能是一个庞大,繁琐,复杂而复杂的工作。 Simple Spring ...
顾名思义是基于spring和memcached的一个插件,该插件目前实现了memcached的查询缓存,利用java的annotation方式和spring的AOP切面编程使得我们在业务层获得缓存数据非常的方便 ##开始使用 首先你必须实现CacheSupport...
该项在java-memcached客户端的基础上使用java5的注解和Sping/AspectJ的AOP,使能够在Sping中管理bean缓存。使用Simple-Spring-Memcached只需要简单的配置和在要缓存的方法的返回值或参数上标注上相应的注解就可以。
memcached安装和使用详细说明 一、开启memcached服务器端服务 二、引入jar 三、创建memcached客户端配置文件 四、创建memcached客户端程序 五、使用Spring AOP在数据查询的Service层实现数据缓存及读取
- Spring 缓存,包括redis、ehcache、spring-cache、memcached、使用redis实现session共享 等。 - spring-docs - Spring 文档生成工具,包括 Swagger - spring-bussiness - Spring 业务应用,包括 AOP、过滤...
实现的主要功能有:客户端Frame、客户端VAD、异常处理、错误处理、AOP日志管理、计划任务、操作日志管理、数据分页功能、线程池管理、内存缓存管理。主要工具有:系统日志工具、应用属性配置工具、系统属性配置工具...
实现的主要功能有:客户端Frame、客户端VAD、异常处理、错误处理、AOP日志管理、计划任务、操作日志管理、数据分页功能、线程池管理、内存缓存管理。主要工具有:系统日志工具、应用属性配置工具、系统属性配置工具...
3、系统用到缓存技术,MemCached和Redis这2种,具体缓存资料网上很多。 二、目录结构: 01 Reference DLL 这里主要包括第三方的框架和组件项目,把这些文件分门别类地集中放在此目录下。 02 Solution Items 项目...
3、系统用到缓存技术,MemCached和Redis这2种。 01 Reference DLL 这里主要包括第三方的框架和组件项目,把这些文件分门别类地集中放在此目录下。 02 Solution Items 项目的规范、流程、重要文件等。 03 Test 这里...
非静态模式下提供静态缓存、Memcached等多个缓存技术 模板插件化 模板插件化,安装卸载方便,XC数据调用标签 为了避免不必要误会,在此事先说明XGCMS建站系统部分代码借鉴了xiuno bbs、PHPCMS,因为本人之前...
- Spring Boot 缓存,包括redis、ehcache、spring-cache、memcached、使用redis实现session共享 等。 - springboot-templates - Spring Boot 模板,包括thymeleaf、freemarker、jsp、表单校验 等。 - ...
Zxw.Framework.NetCore 基于EF Core的代码优先模式的DotNetCore快速开发框架 Nuget [最新版本:3.1.3.5] 安装软件包Zxw.Framework.NetCore-版本3.1.3.5 dotnet添加软件包Zxw.Framework.NetCore-版本... AOP缓存组件