文档章节

spring cache使用

贾峰uk
 贾峰uk
发布于 05/26 16:53
字数 729
阅读 7
收藏 1

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

服务类中使用@Cacheable

@Service
public 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

 

@Cacheable注解使用

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

key:存储对象的key。

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

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
@EnableCaching
public 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值。

© 著作权归作者所有

上一篇: 共享Session
下一篇: Springboot 集成redis
贾峰uk
粉丝 2
博文 106
码字总数 164841
作品 0
深圳
私信 提问
恒宇少年/spring-boot-chapter

简书整套文档以及源码解析 专题 专题名称 专题描述 001 Spring Boot 核心技术 讲解SpringBoot一些企业级层面的核心组件 002 Spring Cloud 核心技术 对Spring Cloud核心技术全面讲解 003 Quer...

恒宇少年
2018/04/19
0
0
SpringBootBucket 2.0.4 发布,代号“傲娇的小二晶”

SpringBootBucket 自从1.0.0版本发布后就有好多人喜欢,目前码云上面star数量接近1.2k。上个月还收到了红薯签名的1000 star奖杯,这个我自己也觉得很惊讶。 由于SpringBoot 1.x官方将终止维护...

一刀
2018/09/16
1K
4
SpringBootBucket 1.0.0 发布,SprintBoot 全家桶

Spring Boot 现在已经成为Java 开发领域的一颗璀璨明珠,它本身是包容万象的,可以跟各种技术集成。 本项目对目前Web开发中常用的各个技术,通过和SpringBoot的集成,并且对各种技术通过“一...

一刀
2018/03/05
7.3K
17
Spring Boot 全家桶 - SpringBootBucket

Spring Boot 现在已经成为Java 开发领域的一颗璀璨明珠,它本身是包容万象的,可以跟各种技术集成。 本项目对目前Web开发中常用的各个技术,通过和SpringBoot的集成,并且对各种技术通过“一...

一刀
2018/03/05
0
1
SpringBoot 学习二:操作数据库

本文将从以下几个方面介绍: 前言 配置数据源 SpringBoot 整合 Mybatis SpringBoot 整合 JdbcTemplate SpringBoot 整合 Redis 前言 在上篇文章 SpringBoot 学习一 中已经学习了 SpringBoot的...

tsmyk0715
2018/09/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

redis实现简单的分布式任务调度

实现方法: 1、通过zset数据结构实现任务排序,value=任务信息,score=任务触发时间(unix时间戳) 2、ZRANGEBYSCORE task_key -inf currentTIme, 获取当前时间以前的所有任务 (消费者定时每...

ccman996
27分钟前
3
0
好程序员web前端分享应该怎样学好web前端?

好程序员web前端分享应该怎样学好web前端?作为一个想学好web前端的新人来说,这是一个很好的问题,所以尽早的选择好方向、规划好自己的学习路线,比别人多一点付出更多的努力,你就算是赢在...

好程序员IT
32分钟前
0
0
mysql 存储过程中使用动态sql语句

简单的存储过程各个关键字的用法: CREATE DEFINER = CURRENT_USER PROCEDURE `NewProc`(in _xnb varchar(50))BEGIN## 定义变量DECLARE _num FLOAT(14,6) DEFAULT 0;## @表示全局变...

文文1
35分钟前
5
0
重磅开源|AOP for Flutter开发利器——AspectD

https://github.com/alibaba-flutter/aspectd 问题背景 随着Flutter这一框架的快速发展,有越来越多的业务开始使用Flutter来重构或新建其产品。但在我们的实践过程中发现,一方面Flutter开发...

zhaowei121
38分钟前
1
0
桌面条目文件规范

原文链接 介绍 KDE和GNOME桌面环境都采用了类似的”桌面条目”格式,或描述特定程序如何启动的配置文件,它在菜单中的显示方式等。统一标准对更大的社区有利。 所有各方都同意这样做,即两个...

electricface
42分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部