1.注解

package com.yun.smart.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit; @Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CacheAnnotation { /**
* 缓存key值
* @return
*/
String key(); /**
* 缓存时长
* @return
*/
long timeToLive(); /**
* 对象类型
* @return
*/
Class<?> clazz(); /**
* 缓存时长单位,默认分
* @return
*/
TimeUnit timeUnit() default TimeUnit.MINUTES; }

  

2.AOP

package com.yun.smart.aspect;

import java.util.concurrent.TimeUnit;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import com.yun.smart.annotation.CacheAnnotation;
import com.yun.smart.redis.RedisService; @Component
@Aspect
public class CacheAspect { private static Logger LOGGER = LoggerFactory.getLogger(CacheAspect.class); @Autowired
private RedisService redisService; @Around("within(com.yun.smart.cache.service.*) && @annotation(cacheAnnotation)")
public Object doAround(ProceedingJoinPoint pJoinPoint, CacheAnnotation cacheAnnotation) throws Throwable {
String key = cacheAnnotation.key();
TimeUnit timeUnit = cacheAnnotation.timeUnit();
long timeToLive = cacheAnnotation.timeToLive();
Class<?> clazz = cacheAnnotation.clazz(); //获取参数
Object[] args = pJoinPoint.getArgs();
if (args[0] == null) return null; key = key.concat(args[0].toString());
Object obj = redisService.get(key, clazz); if (obj == null) {
Object result = pJoinPoint.proceed();
if (result == null) {
LOGGER.warn("[{}]无命中。", key);
return null;
} redisService.put(key, result, timeToLive, timeUnit);
LOGGER.debug("从数据库命中:{}", result);
return result;
} else {
LOGGER.debug("从缓存命中:{}", obj);
return obj;
} } }

  

 3.使用

/**
* 根据openId查询用户信息
* @param openId
* @return
*/
@CacheAnnotation(key=CacheConstant.USER, clazz=UserInfo.class, timeToLive=24, timeUnit=TimeUnit.HOURS)
public UserInfo getUserInfoById(Long userInfoId) {
return userInfoService.selectById(userInfoId);
}

  

最新文章

  1. Vue-router中文教程-Vue-router参考手册.CHM
  2. SQL语句注入
  3. HDU 4920 Matrix multiplication 矩阵相乘。稀疏矩阵
  4. 2016 ACM/ICPC Asia Regional Shenyang Online 1007/HDU 5898 数位dp
  5. bzoj 1565 最大权闭合子图
  6. ADO.NET- 基础总结及实例介绍
  7. Curl之Post Json
  8. UDID
  9. 如何修改UITableView每个cell的分隔线和左边的距离?
  10. Mongodb数据库命令端经常使用操作
  11. 阿里云ECS每天一件事D9:nginx1.7整合tomcat8.0
  12. VS EF Error: Configuration Error extension=&quot;.edmx&quot; type=&quot;System.Data.Entity.Design.AspNet.EntityDesignerBuildProvider&quot;
  13. openssl命令行-证书认证
  14. NPOI导Excel样式设置(转)
  15. 记住这个网站:服务器相关数据统计网站 http://news.netcraft.com/
  16. magento 1.9 nginx 404
  17. 游戏编程模式 Game Programming Patterns (Robert Nystrom 著)
  18. 使用python调用淘宝的ip地址库查询接口结合zabbix判断dnspod域名解析是否正确
  19. jquery实现拖拽进度条并显示百分比的特效
  20. 关于shortcut icon和icon

热门文章

  1. gpcj-07.为什么是连锁零售类公司
  2. 结合JVM 浅谈Java 类加载器(Day_03)
  3. 基于 IntersectionObserver 实现一个组件的曝光监控
  4. 七、.net core(.NET 6)使用Serilog进行配置和实现日志记录
  5. win7 32位系统 安装node.js最新版本遇到的问题
  6. 删除本地解压版Mysql
  7. Go语言的函数03---返回值
  8. ZooKeeper学习笔记四:使用ZooKeeper实现一个简单的分布式锁
  9. PaddlePaddle推理部署
  10. NVIDIA DeepStream 5.0构建智能视频分析应用程序