博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring cache使用
阅读量:6094 次
发布时间:2019-06-20

本文共 2353 字,大约阅读时间需要 7 分钟。

hot3.png

Spring 3.1 引入了基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使用的抽象,通过在既有代码中添加少量它定义的各种 annotation,即能够达到缓存方法的返回对象的效果。

服务类中使用@Cacheable

@Servicepublic class UserService {		@Cacheable(value= {"user-cache"},key="#id")	public User getUserById(String id) {		System.out.println("這次沒有使用緩存");		User user = new User();		user.setId("12345");		user.setUserName("sean");		user.setPassWord("password123");		return user;	}}

@Cacheable(value= {"user-cache"},key="#id")这个注解的意思是当调用这个方法的时候,会从一个名叫 user-cache的缓存中查询key为id的值。如果不存在,则执行实际的方法并将结果写入缓存。如果存就从缓存中读取,在这里的缓存中的 key 就是参数 id。

由于本项目配置了redis作为缓存方案,数据将会被放入redis中存储。执行该方法之后redis中存储数据。出现user-cache缓存,keyid为12345

1456dfd1a7980532dbdff954b81947880a9.jpg

 

@Cacheable注解使用

value:指定一个或多个cache名称,同cacheNames。

key:存储对象的key。

除了使用方法参数(#参数名 或 #参数.属性名 )作为key,我还可以使用root对象来生成key。

e12781eac5e989bd36aa00bc90b021badde.jpg

1.spring 默认使用root对象属性,#root可以省略

@Cacheable(value = { "sampleCache" ,"sampleCache2"},key="cache[1].name")

使用当前缓存“sampleCache2”的名称作为key。

2.自定义key:key = 类名.方法名.参数值  添加字符用单引号

@Cacheable(value = { "user-cache"},key="targetClass.getName()+'.'+methodName+'.'+#id")

使用当前被调用的class类名+被调用方法名+参数id拼接之后做key值。

 

3.除了使用key指定外,Spring还提供了org.springframework.cache.interceptor.KeyGenerator接口,使用keyGenerator去指定实现此接口的bean的名字。

@Cacheable(cacheNames="sampleCache", keyGenerator="myKeyGenerator")

4.condition : 指定发生条件

@Cacheable(condition="#id >5")  //参数id 大于5时加入缓存

cache配置类

@Configuration@EnableCachingpublic class RedisConfig extends CachingConfigurerSupport {	@Bean	public KeyGenerator keyGenerator() {		return new KeyGenerator() {			@Override			public Object generate(Object target, Method method, Object... params) {				StringBuilder sb = new StringBuilder();				sb.append(target.getClass().getName());				sb.append(method.getName());				for (Object object : params) {					sb.append(object.toString());				}				return sb.toString();			}		};	}}

@EnableCaching注解是spring framework中的注解驱动的缓存管理功能。自spring版本3.1起加入了该注解。如果你使用了这个注解,那么你就不需要在XML文件中配置cache manager了,等价于 <cache:annotation-driven/> 。能够在服务类方法上标注@Cacheable。

使用keyGenerator设置key值

@Cacheable(value= {"login-user-cache"},keyGenerator="keyGenerator")	public User getUserByName(String userName) {		System.out.println("這次沒有使用緩存");		User user = new User();		user.setId("12346");		user.setUserName("jiafeng");		user.setPassWord("password123");		return user;			}

执行该方法之后缓存内容按照keyGenerator定义的规则生成key值。

6026943df181a16e4e2ee0b6129447f03f1.jpg

转载于:https://my.oschina.net/u/3100849/blog/3054216

你可能感兴趣的文章
java连接MySql数据库
查看>>
转:Vue keep-alive实践总结
查看>>
android studio修改新项目package名称
查看>>
深入python的set和dict
查看>>
C++ 11 lambda
查看>>
Hadoop2.5.0 搭建实录
查看>>
实验吧 recursive write up
查看>>
High-speed Charting Control--MFC绘制图表(折线图、饼图、柱形图)控件
查看>>
go test命令參数问题
查看>>
linux 搜索文本
查看>>
超实用Mac软件分享(二)
查看>>
Android JSON数据解析
查看>>
DEV实现日期时间效果
查看>>
java注解【转】
查看>>
Oracle表分区
查看>>
centos 下安装g++
查看>>
调试、手机-手游开发知识(三)--NDK联机调试-by小雨
查看>>
嵌入式,代码调试----GDB扫盲
查看>>
类斐波那契数列的奇妙性质
查看>>
配置设置[Django]引入模版之后报错Requested setting TEMPLATE_DEBUG, but settings are not configured....
查看>>