news 2026/9/15 10:33:24

AOP+自定义注解,实现redis缓存

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AOP+自定义注解,实现redis缓存

添加如下依赖

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>

其余在spring环境。

@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic@interfaceYdCache{//缓存时长longtime()default-1L;}
@Aspect@ComponentpublicclassSysCacheAspect{@ResourceStringRedisTemplatestringRedisTemplate;@Around("@annotation(com.example.mybatisplus.aspect.YdCache)")publicObjectaround(ProceedingJoinPointpoint)throwsThrowable{//取得方法签名MethodSignaturesignature=(MethodSignature)point.getSignature();//取得方法对象Methodmethod=signature.getMethod();//取得缓存注解对象YdCacheydCache=method.getAnnotation(YdCache.class);//取得注解上的缓存时长longcacheTime=ydCache.time();//redis的key为类名:方法名:参数StringclassName=point.getTarget().getClass().getName();StringmethodName=signature.getName();StringargsJson=JSON.toJSONString(point.getArgs());Stringkey=className+":"+methodName+":"+argsJson;//取得返回值类类型Class<?>returnType=method.getReturnType();//从缓存取得数据StringcacheData=stringRedisTemplate.opsForValue().get(key);//命中缓存if(cacheData!=null){//返回缓存数据returnJSON.parseObject(cacheData,returnType);}//没命中缓存 执行方法Objectresult=point.proceed();//设置缓存,缓存时长为负数则永久缓存if(cacheTime<0){stringRedisTemplate.opsForValue().set(key,JSON.toJSONString(result));}else{//缓存指定时长stringRedisTemplate.opsForValue().set(key,JSON.toJSONString(result),cacheTime,TimeUnit.SECONDS);}returnresult;}}


在方法上添加注解即可,time为缓存时间

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 10:32:33

Android buildTypes和productFlavors实现差异化打包

什么是buildTypes和productFlavors https://developer.android.com/build/build-variants?hlzh-cn 1. buildTypes buildTypes 主要用于定义不同的构建变体&#xff0c;通常用于区分不同的构建模式&#xff0c;如开发版、发布版等。每个 buildType 都会有一组配置项&#xf…

作者头像 李华
网站建设 2026/9/15 10:31:58

低功耗策略的收益与风险平衡:工程落地黄金点判定

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/15 10:30:27

yq 如何在 Linux 上通过 wget 下载预编译二进制并安装到 PATH

yq 如何在 Linux 上通过 wget 下载预编译二进制并安装到 PATH 【免费下载链接】yq yq is a portable command-line YAML, JSON, XML, CSV, TOML, HCL and properties processor 项目地址: https://gitcode.com/GitHub_Trending/yq/yq yq 是一个用 Go 编写的命令行处理器…

作者头像 李华
网站建设 2026/9/15 10:29:30

Java类型转换实战:处理带单位字符串的工业级方案

1. 项目概述&#xff1a;当Integer遇上"12.5kg"的魔幻现实上周五深夜11点&#xff0c;我的企业微信突然被十几条报警信息轰炸。打开日志一看&#xff0c;某个核心业务模块的失败率飙升到47%。追查下去&#xff0c;发现是第三方物流系统返回的"12.5kg"字符串…

作者头像 李华