java缓存注解_Java自定义注解实现Redis自动缓存的方法

当我们在开发一个项目时,当数据量达到一千万个大型数据库时,对查询速度的要求也相对较高。下面的成都seo技术频道编辑器将向您介绍用Java定制注释实现Redis自动缓存的方法。

在实际开发中,可能经常需要从MySQL中查询一段数据(如用户信息),并在此时将用户信息保存到Redis

首先,我们可以在查询业务逻辑后编写一段与Redis相关的操作代码。过了很长时间,我们发现这段代码实际上只做Redis编写,与业务逻辑没有实质性的联系。我们有什么办法可以省略这个重复的工作吗?

首先想到的是使用AOP来完成我们的切片相关处理(即,在查询一些数据的切入点上编写Redis)。那么,您如何知道在哪里缓存,也就是说,在哪里使用AOP?引用数据库事务的实现使用@Transactional,然后我们还可以定制一个注释@RedisCache,并在需要的方法上使用这个注释。方法返回的结果作为要保存的信息,方法的查询参数(如用户的id)可以作为关键字。上面对

的分析似乎是可行的,所以让我们做吧!

详细步骤

1。创建一个自定义注释@ Rediscache包再分发;导入Java . lang . annotation . *;/* * *自定义注释,Redis自动缓存的实现*/@保留策略. runtime)@ target(element type . method)@ inherited @ documented public @ interface discache { }

2。为缓存写入创建一个辅助类:RedisHelper.java,它包含一个接收不同类的实例对象的规范方法,以确保我们的方法是通用的。这里更简单,将对象直接转换成json,然后用字符串保存在Redis中。此外,不管是什么情况,它实际上可以完善特定的逻辑,例如判断缓存是否已经存在以及缓存信息是否是最新的包再贴现;import com . Alibaba . fastjson . JSonobject;import org . spring framework . beans . factory . annotation . Autowired;import org . spring framework . data . redis . core . StringredExmplate;导入org . spring framework . structure . component;@Componentpublic类RedisHelper { @Autowired私有StringDestEmplate StringDestEmplate;公共&lt。T&gt。void saveCache(字符串键,T t){字符串JSON = JSonobject . to SONstring(T);stringredextemplate . opsforvalue()。set(键,JSON);}}

3。创建一个RedisCacheAspect.java,并使用AOP框架AspectJ来完成切片处理(用万金油包装通知,并根据需要使用特定类型的通知)。我们在这里使用返回通知,也就是说,在方法调用成功获得返回结果之后,切片处理动作包重发;import org . AspectJ . lang . proceedingJoinPoint;导入。导入org . AspectJ . lang . annotation . aspect;import org . AspectJ . lang . annotation .切入点;import org . spring framework . beans . factory . annotation . Autowired;导入org . spring framework . structure . component;@Aspect@Componentpublic类RedisCacheAspect { @Autowired私有RedisHelper redisHelper@ pointcut(“@ annotation(Redis。rediscache)")public void setjointpoint(){ }//包装通知:返回值@ Outh(value = " Setjointpoint()")可以从方法(ProcesedingJoinPoint ProcesedingJoinPoint)获取公共对象{对象结果= null请尝试{//预先通知结果= process joint . processed();//返回通知//缓存到重新发布对象[]参数=处理连接点。get args();//密钥策略:完整的类名-要缓存的对象的id,例如,entity . user-1 redishhelper . save cache(result . get class()。getname()+"-"+参数[0],结果);} catch(可丢弃的e) {//异常通知}//通知后返回结果;}}

4。接下来是代码

usercontroller。与特定业务相关的Javapackagecontroller。import com . Alibaba . fastjson . JSonobject;import org . spring framework . beans . factory . annotation . Autowired;导入org . spring framework . structure . controller;导入org . spring framework . web . bind . annotation . PathVariable;导入org . spring framework . web . bind . annotation . RequestMapping;导入org . spring framework . web . bind . annotation . RequestMethod;import org . spring framework . web . bind . annotation . responseBody;导入服务。用户服务;@SuppressWarnings(“未使用”)@Controllerpublic类用户控制器{ @自动连线专用用户服务用户服务;@RequestMapping(值= "/user/{id} ",方法= RequestMethod。GET,produces = "应用程序/JSON;charset=utf-8") @ResponseBody公共字符串测试(@PathVariable Long id){返回JSonobject . to SONstring(UserService . get(id));}}

UserService.java,其中get方法使用自定义注释@ RedisCache包服务;进口刀。用户道;import org . spring framework . beans . factory . annotation . Autowired;导入org . spring framework . structure . service;导入redis。再贴现。导入java.util.ArrayList。导入java.util.HashMap。导入Java . util . list;导入Java . util . map;@服务公共类用户服务& lt用户>实现基础服务& lt用户>{ @自动连线私人用户道用户道;公共地图添加(用户用户){返回空值;}公共地图更新(用户用户){返回空值;} @RedisCache公共用户获取(长id) {返回(用户)UserDao . get(id);}公共列表& lt用户>查询(用户用户){列表& lt用户>列表=新数组列表& lt用户>();list = userDao.query(用户);退货清单;}公共地图删除(用户用户){返回空值;}}

5。Test

浏览器直接访问http://localhost:8080/user/1,并返回

http://localhost:8080/user/1

连接Redis查看结果127.0.0.1:6381&gt。键实体*1)实体。用户1"127.0.0.1:6381&gt。获取实体。用户-1"{\"id\":1,\ "移动\":\"110\ ",\ "名称\ ":\ " \ xe7 \ x94 \ xa8 \ xe6 \ x88 \ xb71 \ ",\ "密码\":\"123456\ ",\ "用户名\":\"0001\"}"127.0.0.1:6381&gt。

以上是成都seo技术频道介绍的实现Java自定义注释的Redis自动缓存的方法。事实上,我们可以在业余时间好好学习。我希望这篇文章能帮助你

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值