Spring Cache Demo

1,配置cacheManager,applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:ehcache="http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring"
    xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:cache="http://www.springframework.org/schema/cache"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-4.0.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
    http://www.springframework.org/schema/cache
    http://www.springframework.org/schema/cache/spring-cache-4.0.xsd
    http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring
    http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring.xsd
    http://www.springframework.org/schema/data/jpa
    http://www.springframework.org/schema/data/jpa/spring-jpa-4.0.xsd">

    <context:annotation-config />

    <context:component-scan base-package="com.zouhao.spring.cache" />

    <cache:annotation-driven/>

    <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
        <property name="caches">
            <set>
                <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean">
                    <property name="name" value="default"/>
                </bean>
                <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean">
                    <property name="name" value="baseCache"/>
                </bean>
            </set>
        </property>
    </bean>
</beans>

2,测试实现Controller

package com.zouhao.spring.cache.controller;
import javax.xml.ws.Response;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.fastjson.JSON;
import com.zouhao.spring.cache.entity.CacheObject;
import com.zouhao.spring.cache.service.SpringCacheService;

@Controller
@RequestMapping("/cache")
public class SpringCacheController {

    @Autowired
    private SpringCacheService springCacheService;

    @ResponseBody
    @RequestMapping(value = "/getCache", method= RequestMethod.GET)
    private String getCacheById(@RequestParam("id") Integer id){

        return JSON.toJSONString(springCacheService.getCacheObject(id));
    }

    @ResponseBody
    @RequestMapping(value = "/removeCache", method= RequestMethod.GET)
    private String clearCacheById(@RequestParam("id") Integer id){

        springCacheService.clearCacheObjectById(id);
        return "clear success";
    }

    @ResponseBody
    @RequestMapping(value = "/updateCache", method= RequestMethod.GET)
    private String updateCacheById(@RequestParam("id") Integer id){

        springCacheService.updateCacheObject(id);
        return "update success";
    }

}

3,测试实现Service

package com.zouhao.spring.cache.service;

import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import com.zouhao.spring.cache.entity.CacheObject;

@Service
public class SpringCacheService {

    //将查询结果通过id作为key缓存
    @Cacheable(key="#id",value="baseCache")
    public CacheObject getCacheObject(Integer id) {
        System.out.println(String.format("query CacheObject from DB by id:%d",id));
        CacheObject obj = newCacheObject(id);
        return obj;
    }

    // 更新 accountCache 缓存
    @CachePut(value="baseCache",key="#id")
    public CacheObject updateCacheObject(Integer id) {
        System.out.println(String.format("update the CacheObject by id:%d", id));
        return updateCacheObjectFromDB(id);
    }

    //清空缓存
    @CacheEvict(value="baseCache",key="#id")
    public void clearCacheObjectById(Integer id) {
    }

    private CacheObject updateCacheObjectFromDB(Integer id) {
        System.out.println(String.format("get CacheObject from cache by id:%d ", id));
        CacheObject obj = getCacheObject(id);
        System.out.println(String.format("set CacheObject name field from cache"));
        obj.setName("xxxxxxxxxxxxxxxxxxxx");
        return obj;
    }

    public CacheObject newCacheObject(Integer id){

        CacheObject obj = new CacheObject();
        obj.setId(id);
        obj.setName("test");
        obj.setPass("pass");
        return obj;
    }

}
时间: 2024-12-17 06:31:09

Spring Cache Demo的相关文章

如何进行高效的源码阅读:以Spring Cache扩展为例带你搞清楚

摘要 日常开发中,需要用到各种各样的框架来实现API.系统的构建.作为程序员,除了会使用框架还必须要了解框架工作的原理.这样可以便于我们排查问题,和自定义的扩展.那么如何去学习框架呢.通常我们通过阅读文档.查看源码,然后又很快忘记.始终不能融汇贯通.本文主要基于Spring Cache扩展为例,介绍如何进行高效的源码阅读. SpringCache的介绍 为什么以Spring Cache为例呢,原因有两个 Spring框架是web开发最常用的框架,值得开发者去阅读代码,吸收思想 缓存是企业级应用开

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

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

Spring cache

注释驱动的 Spring cache 缓存介绍 介绍 spring 3.1 激动人心的新特性:注释驱动的缓存,本文通过一个简单的例子进行展开, 通过对比我们原来的自定义缓存和 spring 的基于注释的 cache 配置方法,展现了 spring cache 的强大之处, 然后介绍了其基本的原理,扩展点和使用场景的限制.通过阅读本文,你可以短时间内掌握 spring 带来的强大缓存技术, 在很少的配置下即可给既有代码提供缓存能力. 概述 Spring 3.1 引入了激动人心的基于注释(annot

Spring Cache抽象详解

缓存简介 缓存,我的理解是:让数据更接近于使用者:工作机制是:先从缓存中读取数据,如果没有再从慢速设备上读取实际数据(数据也会存入缓存):缓存什么:那些经常读取且不经常修改的数据/那些昂贵(CPU/IO)的且对于相同的请求有相同的计算结果的数据.如CPU--L1/L2--内存--磁盘就是一个典型的例子,CPU需要数据时先从L1/L2中读取,如果没有到内存中找,如果还没有会到磁盘上找.还有如用过Maven的朋友都应该知道,我们找依赖的时候,先从本机仓库找,再从本地服务器仓库找,最后到远程仓库服务器

Spring Cache扩展:注解失效时间+主动刷新缓存

*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* BLOCKS =============================================================================*/ p, blockquote, ul, ol, dl, table, pre { margin: 15px 0; } /* HEAD

Spring Cache集成redis

Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set –有序集合)和hash(哈希类型).这些数据类型都支持push/pop.add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的.在此基础上,redis支持各种不同方式的排序.与memcached一样,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数据

我的Spring入门Demo

第一步:导入Spring jar 包 Spring核心包(4个) 日志包(2个) jdbc模板支持(1个) spring-jdbc-3.2.0.RELEASE.jar 模板相关事务处理包(1个) spring-tx-3.2.0.RELEASE.jar ORM框架模板支持(1个) spring-orm-3.2.0.RELEASE.jar 第二步:增加一个Spring 配置文件    beans.xml <?xml version="1.0" encoding="UTF-8

转:Spring Cache抽象详解

缓存简介 缓存,我的理解是:让数据更接近于使用者:工作机制是:先从缓存中读取数据,如果没有再从慢速设备上读取实际数据(数据也会存入缓存):缓存什么:那些经常读取且不经常修改的数据/那些昂贵(CPU/IO)的且对于相同的请求有相同的计算结果的数据.如CPU--L1/L2--内存--磁盘就是一个典型的例子,CPU需要数据时先从L1/L2中读取,如果没有到内存中找,如果还没有会到磁盘上找.还有如用过Maven的朋友都应该知道,我们找依赖的时候,先从本机仓库找,再从本地服务器仓库找,最后到远程仓库服务器

SpringBoot非官方教程 | 第十三篇:springboot集成spring cache

转载请标明出处: http://blog.csdn.net/forezp/article/details/71023614 本文出自方志朋的博客 本文介绍如何在springboot中使用默认的spring cache, 声明式缓存 Spring 定义 CacheManager 和 Cache 接口用来统一不同的缓存技术.例如 JCache. EhCache. Hazelcast. Guava. Redis 等.在使用 Spring 集成 Cache 的时候,我们需要注册实现的 CacheMana