注解实现接口缓存(清除缓存注解)

网友投稿 275 2023-01-11


本篇文章给大家谈谈注解实现接口缓存,以及清除缓存注解对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 今天给各位分享注解实现接口缓存的知识,其中也会对清除缓存注解进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

Hystrix实现请求合并/请求缓存

在正常注解实现接口缓存的分布式请求中注解实现接口缓存,客户端发送请求,服务器在接受请求后,向服务提供者发送请求获取数据,这种模式在高并发的场景下就会导致线程池有大量的线程处于等待状态,从而导致响应缓慢,同时线程池的资源也是有限的,每一个请求都分配一个资源,也是无谓的消耗注解实现接口缓存了很多服务器资源,在这种场景下注解实现接口缓存我们可以通过使用hystrix的请求合并来降低对提供者过多的访问,减少线程池资源的消耗,从而提高系统的吞吐量和响应速度,如下图,采用请求合并后的服务模式

请求合并可以通过构建类和添加注解的方式实现,这里注解实现接口缓存我们先说通过构建合并类的方式实现请求合并

请求合并的实现包含了两个主要实现类,一个是合并请求类,一个是批量处理类,合并请求类的作用是收集一定时间内的请求,将他们传递的参数汇总,然后调用批量处理类,通过向服务调用者发送请求获取批量处理的结果数据,最后在对应的request方法体中依次封装获取的结果,并返回回去

通过创建构造方法来设置合并器的收集时间,也就是合并器一次收集客户端请求的时间是多久,然后通过收集请求器获取在这段时间内收集的所有请求参数,在传递给批量执行程序去批量执行,mapResponseToRequests方法获取返回的结果,并根据对应的request请求将结果返回到对应的request请求中
批量处理类

请求缓存是对一次请求的数据进行缓存,当有新的请求进来的时候,将会进行初始化操作,保证读取到的数据是最新的而不是上次缓存的数据,hystrix就是去缓存一次请求中相同cachekey的查询结果
个人认为这个功能相对比较鸡肋,使用的场景并不多

对于请求缓存可以通过实现类和注解的方式进行实现,这里我并没有去研究创建实现类的方式,比较复杂,我这里是使用了注解的方式进行请求缓存的实现

首先创建一个服务提供者的实现类,用于返回调用值,这里采用随机数的方式,保证每次生成的数值不重复,以便于验证我们的缓存是否起作用

请求缓存具体注解实现类

最后调用接口

查看结果

springboot开启Cache缓存

一、Cache接口下Spring提供了各种xxxCache的实现;如RedisCache,EhCacheCache ,ConcurrentMapCache等;

每次调用需要缓存功能的方法时,Spring会检查检查指定参数的指定的目标方法是否已经被调用过;如果有就直接从缓存中获取方法调用后的结果,如果没有就调用方法并缓存结果后返回给用户。下次调用直接从缓存中获取。

使用Spring缓存抽象时我们需要关注以下两点;

1、确定方法需要被缓存以及他们的缓存策略

2、从缓存中读取之前缓存存储的数据
二、注意:

1.当我们要使用root对象的属性作为key时我们也可以将“#root”省略,因为Spring默认使用的就是root对象的属性。 如

@Cacheable(key = "targetClass + methodName +#p0")

2.使用方法参数时我们可以直接使用“#参数名”或者“#p参数index”。 如:

@Cacheable(value="users", key="#id")

@Cacheable(value="users", key="#p0")
三、使用
1.依赖

2.启动类注解@EnableCaching开启缓存

3.缓存@Cacheable
@Cacheable注解会先查询是否已经有缓存,有会使用缓存,没有则会执行方法并缓存。

参考 https://www.cnblogs.com/yueshutong/p/9381540.html

spring cache 注解 缓存名有什么用

来看下 @Cacheable 的说明


@Cacheable(value="accountCache"),这个注释的意思是,当调用这个方法的时候,会从一个名叫 accountCache 的缓存中查询,如果没有,则执行实际的方法(即查询数据库),并将执行的结果存入缓存中,否则返回缓存中的对象。这里的缓存中的 key 就是参数 userName,value 就是 Account 对象。“accountCache”缓存是在 spring*.xml 中定义的名称。

示例:


@Cacheable(value="accountCache")// 使用了一个缓存名叫 accountCache   
public Account getAccountByName(String userName) {  
     // 方法内部实现不考虑缓存逻辑,直接实现业务  
     System.out.println("real query account."+userName);   
     return getFromDB(userName);   
}


主要作用是给 cache 取个名称

我配置了redis注解缓存,为什么不起作用

作为缓存服务器,如果不加以限制内存的话,就很有可能出现将整台服务器内存都耗光的情况,可以在redis的配置文件里面设置:
example:
#
限定最多使用1.5GB内存
maxmemory
1536mb
如果内存到达了指定的上限,还要往redis里面添加更多的缓存内容,需要设置清理内容的策略:
默认为0,没有指定最大缓存,如果有新的数据添加,超过最大内存,则会使redis崩溃,所以一点要设置。
设置maxmemory之后,配合的要设置缓存数据回收策略。 关于注解实现接口缓存和清除缓存注解的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。 注解实现接口缓存的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于清除缓存注解、注解实现接口缓存的信息别忘了在本站进行查找喔。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Springboot 配置RabbitMQ文档的方法步骤
下一篇:自定义接口测试返回码设置(接口测试返回码说明)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~