关闭

Spring Cache抽象-缓存管理器

标签: springcache缓存管理器
1218人阅读 评论(0) 收藏 举报
分类:

概述

CacheManager是SPI(Service Provider Interface,服务提供程序接口),提供了访问缓存名称和缓存对象的方法,同时也提供了管理缓存、操作缓存和移除缓存的方法。

下面我们来看下SpringCache框架说提供的不同的缓存管理器实现


SimpleCacheManager

通过使用SimpleCacheManager可以配置缓存列表,并利用这些缓存进行相关的操作。

SimpleCacheManager是缓存管理器的简化版本。 我们来看一下下面的配置实例。 对应缓存的定义,我们使用了ConcurrentMapCacheFactoryBean类对ComcurrentMapCache进行实例化,该实例使用了JDK的ConcurrentMap实现。

<!-- (1)添加cache命名空间和schema文件 -->    
    <!-- (2)开启支持缓存的配置项 -->
    <cache:annotation-driven cache-manager="cacheManager" proxy-target-class="true"/>
    <!-- (3) 配置cacheManger -->
    <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager"
        p:caches-ref="cacheObjects">
    </bean>

    <!-- (4)caches集合 -->
    <util:set id="cacheObjects">
        <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
            p:name="default"/>
        <!-- @Cacheable(cacheNames = "littleArtisan")标注的cache名称 -->
        <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
            p:name="littleArtisan"/>
    </util:set>

NoOpCacheManager

NoOpCacheManager主要用于测试目的,事实上它并不缓存任何数据。 我们来看下该缓存管理器的配置定义,我们没有未该管理器提供缓存列表,因为它仅仅作为测试的目的

<bean id="noOpCacheManager" class="org.springframework.cache.support.NoOpCacheManager"/>

ConcurrentMapCacheManager

ConcurrentMapCacheManager使用了JDK的ConcurrentMap。 它提供了与SimpleCacheManager类似的共鞥,但并不需要像前面那样定义缓存。 该缓存定义如下:

<bean id="concurrentMapCacheManager" class="org.springframework.cache.concurrent.ConcurrentMapCacheManager"/>

CompositeCacheManager

CompositeCacheManager能够定义多个缓存管理器。

当在应用程序上下文中声明 <cache:annotation-driven>标记时,它只提供一个缓存管理器,有的时候并不能满足用户的需求,而CompositeCacheManager定义将多个缓存管理器定义组合在一起,从而扩展了该功能。

此外,CompositeCacheManager还提供了一种机制,通过使用fallbackToNoOpCache属性回到NoOpCacheManager.

我们来看下面的的例子: 定义了一个CompositeCacheManager,将一个简单的缓存管理器与HazelCast缓存管理器绑定到一起 。 简单的缓存管理器定义了members缓存,而HazelCast缓存管理器定义了visitors.

<bean id="compositeCacheManager" class="org.springframework.cache.support.CompositeCacheManager">
        <property name="cacheManagers">
            <list>
                <!-- SimpleCacheManager -->
                <bean class="org.springframework.cache.support.SimpleCacheManager">
                    <property name="caches">
                        <set>
                            <bean id="membes"
                                class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"></bean>
                        </set>
                    </property>
                </bean>
                <!-- HazelcastCacheManager -->
                <bean id="cacheManager" class="com.hazelcast.spring.cache.HazelcastCacheManager">
                    <constructor-arg ref="hazelcast" />
                </bean>

            </list>
        </property>
    </bean>


    <hz:hazelcast id="hazelcast">
        <hz:config>
            <hz:map name="vistors">
                <hz:map-store enabled="true" class-name="com.sartisan.cache.domain.Vistor"
                    write-delay-seconds="0" />
            </hz:map>
        </hz:config>
    </hz:hazelcast>
0
0
查看评论

spring缓存cache的使用

在spring配置文件中添加schema和spring对缓存注解的支持:<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework....
  • Petershusheng
  • Petershusheng
  • 2016-09-01 11:42
  • 1168

Spring使用总结(二):添加缓存管理监控MBean

首先激活Spring的缓存管理,XML配置如下:<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/b...
  • yiifaa
  • yiifaa
  • 2017-04-21 16:41
  • 459

Spring 缓存 @cache 详细介绍

介绍 spring 3.1 激动人心的新特性:注释驱动的缓存,本文通过一个简单的例子进行展开,通过对比我们原来的自定义缓存和 spring 的基于注释的 cache 配置方法,展现了 spring cache 的强大之处,然后介绍了其基本的原理,扩展点和使用场景的限制。通过阅读本文,你可以短时间内掌...
  • oqqYeYi
  • oqqYeYi
  • 2014-06-07 13:22
  • 3143

Spring自带缓存配置及Ehcache缓存

spring自带缓存、自建缓存管理器等都可解决项目部分性能问题。结合Ehcache后性能更优,使用也比较简单。 在进行Ehcache学习之前,最好对Spring自带的缓存管理有一个总体的认识。 这篇文章不错:https://www.ibm.com/developerworks/cn/op...
  • QQQQQQ654
  • QQQQQQ654
  • 2017-01-10 11:28
  • 6073

spring缓存机制-入门实例(一)

spring是一个轻量级开源框架,以IoC(Inverse of Control:控制反转)和AOP(Aspect Oriented Programming:面向切面编程)为内核, 兼具功能强大的的原生展现层spring mvc,原生持久层spring jdbc和原生业务层等技术,并且以海纳百川的...
  • sidongxue2
  • sidongxue2
  • 2014-06-13 19:22
  • 4147

Spring Cache抽象-缓存注解

概述 Spring缓存的基本原理 Cacheable 主要针对方法配置能够根据方法的请求参数对其结果进行缓存 键生成器 带条件的缓存 Cacheable 注解参数说明 示例 CachePut 主要针对方法配置能够根据方法的请求参数对其结果进行缓存和 Cacheable 不同的是它每次都会触发真实方法...
  • yangshangwei
  • yangshangwei
  • 2017-10-03 08:40
  • 1570

Spring框架中的Cache抽象层

为了统一支持各种各样的Cache,Spring框架从3.1开始,为应用提供了对各种Cache的一致抽象层。 说到Cache,这里首先需要指出的是,什么样的数据需要放入Cache呢?那就是应用中的Java方法的执行结果。 Spring框架的Cache抽象层围绕如下两个接口,封装了不同Cac...
  • taiyangdao
  • taiyangdao
  • 2016-04-08 12:21
  • 882

shiro中的缓存的配置与使用

缓存是提供性能的重要手段。缓存适合那些经常不变动的数据,比如系统中用户的信息和权限不会经常改变,特别适合缓存起来供下次使用。这样减少了系统查询数据库的次数,提升了性能。shiro自身不实现缓存,而是提供缓存接口,让其他第三方实现,经常EHcache缓存。
  • csujiangyu
  • csujiangyu
  • 2015-10-12 17:03
  • 10105

Spring Cache原理与使用及ICOP平台中的缓存应用

一.Spring Cache概述 Spring3.1中提供了基于注解的缓存技术,他本身并不是缓存的具体实现,而是一个缓存的抽象。通过在既有程序的方法上添加spring cache的注解,可以达到缓存方法返回结果的效果。   二.Spring Cache的特点 1.通过使用少量注解,...
  • sunhuiliang85
  • sunhuiliang85
  • 2017-02-09 20:55
  • 792

spring-cache 雪崩

spring-cache 基本原理是利用拦截器,先尝试读取缓存,未命中缓存,先读库在写入缓存,经过查看源码如果在并发量大的时候容易造成“雪崩”。原因是在更新缓存逻辑中没有做并发更新的处理。
  • lanmo555
  • lanmo555
  • 2016-08-29 18:38
  • 1104
    个人资料
    • 访问:1307731次
    • 积分:19016
    • 等级:
    • 排名:第559名
    • 原创:459篇
    • 转载:0篇
    • 译文:5篇
    • 评论:149条
    WeChat
      欢迎关注我的公众号,干货只有干货,还有更多惊喜和资源在等着你
    博客专栏