我一个方法里需要四次磁盘I/O,并且是串联有关联的,第一成功才能执行第二个...,现在需要每次查出来的数据缓存到Redis里面,但我又不想每次都写重复的代码,所以我打算写一个AOP把冗余的代码抽出来,请问Nacos的Java有没有哪个设计模式是使用到了AOP的思想的?
Nacos 的 Java 实现中是使用了 AOP 的思想,具体实现是基于 Spring AOP 实现的。Spring AOP 支持的 AOP 编程模型是基于 AOP 联盟的切面(Aspect)和通知(Advice),可以通过切面和通知来将关注点(如日志记录、性能统计等)与其他对象分离。
在 Nacos 应用中,使用 AOP 技术实现缓存代码的复用是可行的。一种常用的方式是使用 Spring 的 @Cacheable
注解,在需要缓存数据的方法上加上该注解即可实现数据的缓存。具体实现如下:
添加依赖
利用 Spring 提供的缓存框架,需要在 pom.xml
文件中添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置 Redis 数据库
在 application.properties
或 application.yml
文件中添加 Redis 数据库相关配置:
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
spring.redis.database=0
在需要被缓存的方法上加上@Cacheable
注解
@Service
public class YourService {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Cacheable(value = "yourCacheName", key = "#param1")
public Object queryData(String param1) {
// your code here
return data;
}
}
@Cacheable
注解用于标注该方法需要被缓存,其中 value
属性表示缓存的名称,key
用于指定缓存数据的 key 值是由哪些参数决定的。
这样,在 AOP 切面的帮助下,程序将自动判断缓存是否存在,如果有缓存,则直接从缓存中取出数据;如果没有缓存,则调用实际的方法获取数据并缓存数据,从而达到了代码复用的目的。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。