spring 缓存 @CachePut 和 @Cacheable 区别

页面导航:首页 > 软件编程 > Java编程 > spring 缓存 @CachePut 和 @Cacheable 区别

spring 缓存 @CachePut 和 @Cacheable 区别

来源: 作者: 时间:2016-01-21 09:39 【

首先这两个的区别是:@CachePut:这个注释可以确保方法被执行,[email protected]:当重复使用相同参数调用方法的时候,方法本身不会被调用执行,即方法本

首先这两个的区别是:

@CachePut:这个注释可以确保方法被执行,同时方法的返回值也被记录到缓存中。

@Cacheable:当重复使用相同参数调用方法的时候,方法本身不会被调用执行,即方法本身被略过了,取而代之的是方法的结果直接从缓存中找到并返回了。

[email protected],它的作用是什么呢,每次方法都执行,那么缓存的意义是什么呢?在这里写了一个小实例对这两个标签进行测试,并解释了上边这个疑问。

首先,我们猜想对于同一个缓存实例的相同的key的缓存的数据,[email protected][email protected][email protected]

先看看service:

 

	@Cacheable(value="userCache",key="1000")
	public String getUserByName(String userName) { 
	   System.out.println("两次调用第一次会执行,第二次不会执行!");
	   return getFromDB(userName); 
	} 
	
	@CachePut(value="userCache",key="1000")
	public String updateUserPut(String userName) {
	   return updateDB(userName); 
	} 

注意这里的key定义的都是1000,缓存的实例都是userCache

 

测试方法:

 

		// 加载 spring 配置文件
	    ApplicationContext context = new ClassPathXmlApplicationContext("com/spricache/config/spring-cache.xml");
	    UserService userService = (UserService) context.getBean("userService"); 
	    //会查询
	    System.out.println(userService.getUserByName("txxs"));
	    //会走缓存
	    System.out.println(userService.getUserByName("txxs"));
	    //更新名字,会走数据库
	    System.out.println(userService.updateUserPut("txxsNew"));
	    //会走缓存呢,还是数据库呢?
	    System.out.println(userService.getUserByName("txxsNew"));

执行的结果:

 

两次调用第一次会执行,第二次不会执行!
正在从数据库查询txxs
txxs
txxs
更新数据库txxsNew
txxsNew
txxsNew

我们来分析这个结果:System.out.println(userService.getUserByName("txxs"));被执行两次,第一次是从数据库中取值,第二次是从缓存中取值,这和我们之前所了解的缓存用法是一样的。那么我们调用System.out.println(userService.updateUserPut("txxsNew"));这个方法会更新数据库中的名字,注意这里的key值我们定义的是1000,也就是会更新userCache中key为1000的值,然后将会返回的结果,这里我们也做了一个输出操作,也就是第一个txxsNew。然后再调用System.out.println(userService.getUserByName("txxsNew"));获取key为1000的名字,输出的结果是txxsNew,正是updateUserPut方法更新后的缓存的值。

总结:@[email protected],当需要根据请求改变值的时候,[email protected][email protected][email protected]点:

1、必须是同一个缓存实例。

2、key值必须是相同的。

Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<