Spring学习-缓存

提到缓存,能想到什么?一级缓存、二级缓存、web缓存、redis。所有的缓存无非在宣扬一个优势,那就是快,无需反复查询等。今天讲讲Spring缓存如何实现。

如何实现?

1、声明启用缓存,添加缓存管理器

 1 <beans xmlns="http://www.springframework.org/schema/beans"
 2        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3        xmlns:cache="http://www.springframework.org/schema/cache"
 4        xmlns:p="http://www.springframework.org/schema/p"
 5        xsi:schemaLocation="http://www.springframework.org/schema/beans
 6     http://www.springframework.org/schema/beans/spring-beans.xsd
 7      http://www.springframework.org/schema/cache
 8      http://www.springframework.org/schema/cache/spring-cache.xsd">
 9
10     <cache:annotation-driven />
11
12     <bean id="personService" class="com.jackie.service.PersonService" />
13
14     <!-- generic cache manager -->
15     <bean id="cacheManager"
16           class="org.springframework.cache.support.SimpleCacheManager">
17         <property name="caches">
18             <set>
19                 <bean
20                         class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
21                         p:name="default" />
22
23                 <bean
24                         class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
25                         p:name="personCache" />
26             </set>
27         </property>
28     </bean>
29 </beans>

第10行作用:启用缓存。

15~28行:添加缓存管理器。

编写需要缓存的方法:1、创建一个测试bean  Person对象  2、准备需要缓存的接口方法

 1 @Component
 2 public class Person {
 3
 4     private int id;
 5     private int age;
 6     private String name;
 7
 8     public int getId() {
 9         return id;
10     }
11
12     public void setId(int id) {
13         this.id = id;
14     }
15
16     public int getAge() {
17         return age;
18     }
19
20     public void setAge(int age) {
21         this.age = age;
22     }
23
24     public String getName() {
25         return name;
26     }
27
28     public void setName(String name) {
29         this.name = name;
30     }
31
32     @Override
33     public String toString() {
34         return "Person{" +
35                 "id=" + id +
36                 ", age=" + age +
37                 ", name=‘" + name + ‘\‘‘ +
38                 ‘}‘;
39     }
40 }

准备需要缓存的接口方法

 1 @Service("personService")
 2 public class PersonService {
 3
 4     @Cacheable(value = "personCache")
 5     public Person findPerson(int i) {
 6         System.out.println("real query person object info");
 7
 8         Person person = new Person();
 9         person.setId(i);
10         person.setAge(18);
11         person.setName("Jackie");
12         return person;
13     }
14
15 }
@Cacheable:主要用来配置方法,能够根据方法和请求参数对结果进行缓存,当调用相同参数的方法时,本身不会被调用,取而代之的是直接从返回中找到并返回,简言之,就是缓存中有就取出,没有就执行方法。

既然有缓存的过程,就有删除缓存的过程。@CacheEvict

  
1     @CacheEvict(value = "personCache", key = "#person.getId()")
2     public void updatePerson(Person person) {
3         System.out.println("update: " + person.getName());
4     }
5
6     @CacheEvict(value = "personCache", allEntries = true)
7     public void reload() {
8
9     }

第1行的意思是:当updatePerson被调用时,会根据key来取出相应的缓存记录,并删除。

第6行的意思是:在调用reload方法时,会清空所有的缓存记录。

时间: 2024-08-08 21:39:57

Spring学习-缓存的相关文章

注释驱动的 Spring cache 缓存介绍--转载

概述 Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使用的抽象,通过在既有代码中添加少量它定义的各种 annotation,即能够达到缓存方法的返回对象的效果. Spring 的缓存技术还具备相当的灵活性,不仅能够使用 SpEL(Spring Expression Language)来定义缓存的 key 和各种 condition,还提供开箱即用的缓存

Spring学习笔记1——IOC: 尽量使用注解以及java代码(转)

在实战中学习Spring,本系列的最终目的是完成一个实现用户注册登录功能的项目. 预想的基本流程如下: 1.用户网站注册,填写用户名.密码.email.手机号信息,后台存入数据库后返回ok.(学习IOC,mybatis,SpringMVC的基础知识,表单数据验证,文件上传等) 2.服务器异步发送邮件给注册用户.(学习消息队列) 3.用户登录.(学习缓存.Spring Security) 4.其他. 边学习边总结,不定时更新.项目环境为Intellij + Spring4. 一.准备工作. 1.m

Spring学习笔记1——IOC: 尽量使用注解以及java代码

在实战中学习Spring,本系列的最终目的是完成一个实现用户注册登录功能的项目. 预想的基本流程如下: 1.用户网站注册,填写用户名.密码.email.手机号信息,后台存入数据库后返回ok.(学习IOC,mybatis,SpringMVC的基础知识,表单数据验证,文件上传等) 2.服务器异步发送邮件给注册用户.(学习消息队列) 3.用户登录.(学习缓存.Spring Security) 4.其他. 边学习边总结,不定时更新.项目环境为Intellij + Spring4. 一.准备工作. 1.m

注释驱动的 Spring cache 缓存介绍

概述 Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使用的抽象,通过在既有代码中添加少量它定义的各种 annotation,即能够达到缓存方法的返回对象的效果. Spring 的缓存技术还具备相当的灵活性,不仅能够使用 SpEL(Spring Expression Language)来定义缓存的 key 和各种 condition,还提供开箱即用的缓存

[转]注释驱动的 Spring cache 缓存介绍

原文:http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/ 概述 Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使用的抽象,通过在既有代码中添加少量它定义的各种 annotation,即能够达到缓存方法的返回对象的效果. Spring 的缓存技术还具备相当的灵活性,不仅能

Spring学习(五)——集成memcached客户端

memcached是高性能的分布式内存缓存服务器.许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示. 但随着数据量的增大.访问的集中,就会出现RDBMS的负担加重.数据库响应恶化. 网站显示延迟等重大影响.memcached特别适合 用来解决上述问题,它可以缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度. 提高可扩展性.本例将在前一篇中 实现的Demo程序基础上集成memcached客户端. 1.单个服务端安装部署 官网http://memca

Spring学习系列(四)——Spring中的国际化

1.Java中的国际化国际化(Internationalization)简称 i18n,简单来说就是不同国家/地区/语言的用户,访问同一个程序,得到对应的本地化资源. 首先要确定国家/地区/语言(Locale类) 然后根据不同的Locale获取对应的本地化资源(locale敏感的). 而本地化资源相关的主要有两种:ResourceBundle和Format抽象类的子类.①Jdk为ResourceBundle抽象类提供了两个子类(ListResourceBundle和PropertyResourc

Struts2 + Spring 学习(一)搭建struts开发环境

·为Web应用增加Struts2支持 1. 登陆struts2官网下载struts2的最新版,本文所用的是Struts 2.3.16.2 我们所下载的压缩包内内容应给如下 其中,apps包含了struts2的实例应用,docs包含了struts2的相关文档,lib包含了Struts2框架的核心类库以及struts2的第三方插件类库,src包含了struc包含了struts2框架的全部源码. 2. 在Eclipse新建Web工程,将是所用到的类库放到WEB-INF/路径下 3. 编辑Web应用的w

Spring学习笔记(一)

Spring学习笔记(一) Spring核心思想: IOC:  Inversion Of Control (控制反转) / DI: Dependency Injection (依赖注入) AOP: Aspect Oriented Programming (面向切面编程) IOC 1. 简单的应用 Model package com.wangj.spring.model; public class User { private String username; private String pas