Spring Cache 使用

原创 2015年11月17日 15:47:59

1.Maven配置项目所需要的JAR包

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.zhaochao</groupId>
	<artifactId>Demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>Demo</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<org.springframework.version>4.1.6.RELEASE</org.springframework.version>
		<project.version>1.0.0-SNAPSHOT</project.version>
		<junit.version>4.12</junit.version>

	</properties>

	<dependencies>
		<!-- junit 测试包 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>${junit.version}</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>
		<!-- Bean Factory and JavaBeans utilities (depends on spring-core) Define this if you use Spring Bean APIs (org.springframework.beans.*) -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>

		<!-- Aspect Oriented Programming (AOP) Framework (depends on spring-core, spring-beans) Define this if you use Spring AOP APIs (org.springframework.aop.*) -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>

		<!-- Application Context (depends on spring-core, spring-expression, spring-aop, spring-beans) This is the central artifact for Spring's Dependency Injection Container and is generally always defined -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>


		<!-- Support for testing Spring applications with tools such as JUnit and TestNG This artifact is generally always defined with a 'test' scope for the integration testing framework and unit testing stubs -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${org.springframework.version}</version>
			<scope>test</scope>
		</dependency>





	</dependencies>
</project>

2.Spring配置


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p" xmlns:cache="http://www.springframework.org/schema/cache"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
		http://www.springframework.org/schema/cache
        http://www.springframework.org/schema/cache/spring-cache.xsd"
	default-autowire="byType">

	<context:annotation-config />
	<context:component-scan base-package="com.zhaochao.service" />
	<cache:annotation-driven cache-manager="cacheManager" />
	<!--spring 自带CachedManager    -->
	<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
		<property name="caches">
			<set>
				<bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean">
					<property name="name" value="userCache" />
				</bean>
			</set>
		</property>
	</bean>


</beans>

3.定义用户类


package com.zhaochao.service;

public class User {
	private Integer id;
	private String  name;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	private Integer age;
}

4.用户服务类

package com.zhaochao.service;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

@Service("userService")
public class UserService {

	// 查询缓存
	@Cacheable(value = "userCache", key = "#userId")
	public User getUserById(Integer userId) {
		System.err.println("===queryUserById from db======");
		User u=new User();
		u.setId(userId);
		u.setName("赵云");
		u.setAge(20);
		return u;
	}
	// 删除缓存
	@CacheEvict(value = "userCache", condition ="#userId <=2 ")
	public String deleteUserById(int userId) {
	
		System.err.println("===deleteUserById===="+userId+"===");
		return String.valueOf(userId);
	}
	// 更新缓存
	@CachePut(value = "userCache", key = "#userId")
	public User updateUserById(Integer userId) {
		System.err.println("updateUserById ======== in DB =========");
		User u=new User();
		u.setId(userId);
		u.setName("马超");
		u.setAge(20);
		return u;
	}

}

5.测试类

package com.zhaochao.service.test;

import org.junit.Test;


import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.zhaochao.service.UserService;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring-common.xml")
public class UserServiceTest {
	@Autowired
	private UserService userService;

	@Test
	public void testCache(){
		//首次查询
		System.err.println(userService.getUserById(1));
		System.err.println(userService.getUserById(2));
		System.err.println(userService.getUserById(3));
		System.err.println(userService.getUserById(4));
		System.err.println();
		//缓存查询
		System.err.println(userService.getUserById(1));
		System.err.println(userService.getUserById(2));
		System.err.println();
		//更新缓存
		System.err.println(userService.updateUserById(1));
		System.err.println(userService.getUserById(1));
		System.err.println();
		//删除缓存中userId<2
		System.err.println(userService.deleteUserById(1));
		System.err.println(userService.deleteUserById(4));
		System.err.println(userService.getUserById(1));
		System.err.println(userService.getUserById(4));
		
		
	}
}

6.结果




7.自定义缓存将spring 配置改成

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p" xmlns:cache="http://www.springframework.org/schema/cache"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
		http://www.springframework.org/schema/cache
        http://www.springframework.org/schema/cache/spring-cache.xsd"
	default-autowire="byType">

	<context:annotation-config />
	<context:component-scan base-package="com.zhaochao.service" />
	<cache:annotation-driven cache-manager="cacheManager" />

  <!-- 自定义CachedManager  -->
	<bean id="cacheManager" class="com.zhaochao.service.MyCacheManager">
		<property name="caches">
			<set>
				<bean class="com.zhaochao.service.MyCache" p:name="userCache" />
			</set>
		</property>
	</bean>

</beans>

8.MyCache


package com.zhaochao.service;

import java.util.HashMap;
import java.util.Map;
import org.springframework.cache.Cache;
import org.springframework.cache.support.SimpleValueWrapper;

public class MyCache implements Cache {
	private String name;

	public void setName(String name) {
		this.name = name;
	}
	private Map<Integer, User> store = new HashMap<Integer, User>();
	public MyCache() {

	}
	public MyCache(String name) {
		this.name = name;
	}
	public String getName() {
		return this.name;
	}

	public Object getNativeCache() {
		return null;
	}
	public ValueWrapper get(Object key) {
		ValueWrapper result = null;
		User thevalue = store.get(key);
		if (thevalue != null) {
			result = new SimpleValueWrapper(thevalue);
		}
		return result;
	}
	public <User> User get(Object key, Class<User> type) {
		return (User) store.get(key);
	}
	public void put(Object key, Object value) {
		store.put((Integer) key, (User) value);
	}
	public ValueWrapper putIfAbsent(Object key, Object value) {
		return null;
	}

	public void evict(Object key) {
		store.remove((String) key);
	}
	public void clear() {
		store.clear();
	}

}

9.MyCacheManager

package com.zhaochao.service;

import java.util.Collection;

import org.springframework.cache.support.AbstractCacheManager;

public class MyCacheManager extends AbstractCacheManager {
	private Collection<? extends MyCache> caches;

	public void setCaches(Collection<? extends MyCache> caches) {
		this.caches = caches;
	}
	@Override
	protected Collection<? extends MyCache> loadCaches() {
		return this.caches;
	}

}



版权声明:本文为博主原创文章,未经博主允许不得转载。

SpringCache(Spring使用Cache)

从3.1开始,Spring引入了对Cache的支持。其使用方法和原理都类似于Spring对事务管理的支持。Spring Cache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该...
  • u013068377
  • u013068377
  • 2016年11月22日 21:01
  • 4410

Spring-boot中使用Cache

Spring-boot中使用Cache随着应用系统的访问数量增加数据规模也越来越大,如何提高数据的检索响应尤其是对经常性访问的数据成为大家探索的方式。在这种前提下缓存技术就成为了大家的首要选择。 下...
  • tyyytcj
  • tyyytcj
  • 2017年06月26日 17:01
  • 440

Spring 使用Cache

从3.1开始Spring引入了对Cache的支持。其使用方法和原理都类似于Spring对事物管理的支持。Spring Cache是作用在方法上的,其核心思想是:当我们在调用一个缓存方法时会把该方法参数...
  • u012106290
  • u012106290
  • 2016年08月08日 18:18
  • 1055

Spring Cache使用

记录下自己项目在用的Spring Cache的使用方式。 Spring的抽象已经做得够好了,适合于大多数场景,非常复杂的就需要自己AOP实现了。 Spring官网的文档挺不错的,但是对Cache这...
  • u011202334
  • u011202334
  • 2017年03月13日 17:51
  • 408

Spring Cache与Redis结合使用

Spring Cache与Redis结合使用 Spring Cache与Redis结合使用 Redis 创建Spring项目 集成Redis Cache部分代码 前不久做了一个需要查询多,更新少的功...
  • xia215266092
  • xia215266092
  • 2017年11月19日 15:21
  • 516

spring缓存cache的使用

在spring配置文件中添加schema和spring对缓存注解的支持:
  • Petershusheng
  • Petershusheng
  • 2016年09月01日 11:42
  • 1157

在spring中利用Guava实现本地Cache的具体配置 第一篇<一>

基于注解的配置实现spring Cache本地缓存 操作spring Guava cache beginbegin Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库...
  • J3oker
  • J3oker
  • 2016年12月24日 14:13
  • 689

Spring Cache 注解用法

缓存策略 Eviction policy 移除策略,即如果缓存满了,从缓存中移除数据的策略;常见的有LFU、LRU、FIFO: FIFO(First In First Out):先进先出算法,即...
  • lsgqjh
  • lsgqjh
  • 2017年01月12日 19:56
  • 2010

Spring Cache 使用

Spring Cache 使用
  • Rickesy
  • Rickesy
  • 2015年08月19日 14:14
  • 1651

在spring中利用Guava实现本地Cache的具体配置 第二篇<二>

通过直接实现org.springframework.cache.Cache 接口来管理和实现缓存springframework 为我们提供了一套公用的接口模版标准 本文将通过Guava工程 利用单例实...
  • J3oker
  • J3oker
  • 2016年12月24日 14:32
  • 1279
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring Cache 使用
举报原因:
原因补充:

(最多只允许输入30个字)