• spring使用@Cache的简单实现


    基于xml的配置感觉没有注解形式简单明了,咱不考虑了。

    进入正题之前先提个疑问,希望知道的人能告诉一下

    下述介绍会有这段代码:

    @Cacheable(value="myCache", key="'get'+#userNo")  
            public String get(String userNo){  
    此处#userNo会动态的传入?

    1,spring配置文件

    <bean id="cacheManager" class="org.springframework.cache.guava.GuavaCacheManager">
            <property name="cacheSpecification" value="initialCapacity=512,maximumSize=4096,concurrencyLevel=16,expireAfterAccess=360s" />
     </bean>
    
    <!-- 启用缓存注解功能 -->
     <cache:annotation-driven order="1" cache-manager="cacheManager" proxy-target-class="true" />
    View Code

    @参考文章1里提供了SimpleCacheManager进行的配置

    2,类中使用缓存

    @参考文章1里写的比较好,不自己写代码了,直接复制粘贴

    
    
     package com.jadyer.service;  
          
        import java.util.Map;  
        import java.util.concurrent.ConcurrentHashMap;  
          
        import org.springframework.cache.annotation.CacheEvict;  
        import org.springframework.cache.annotation.Cacheable;  
        import org.springframework.stereotype.Service;  
          
        /** 
         * Cacheable注解负责将方法的返回值加入到缓存中 
         * CacheEvict注解负责清除缓存(它的三个参数与@Cacheable的意思是一样的) 
         * @see ---------------------------------------------------------------------------------------------------------- 
         * @see value------缓存位置的名称,不能为空,若使用EHCache则其值为ehcache.xml中的<cache name="myCache"/> 
         * @see key--------缓存的Key,默认为空(表示使用方法的参数类型及参数值作为key),支持SpEL 
         * @see condition--只有满足条件的情况才会加入缓存,默认为空(表示全部都加入缓存),支持SpEL 
         * @see ---------------------------------------------------------------------------------------------------------- 
         * @see 该注解的源码位于spring-context-3.2.4.RELEASE-sources.jar中 
         * @see Spring针对Ehcache支持的Java源码位于spring-context-support-3.2.4.RELEASE-sources.jar中 
         * @see ---------------------------------------------------------------------------------------------------------- 
         * @create Oct 3, 2013 6:17:54 PM 
         * @author 玄玉<http://blog.csdn.net/jadyer> 
         */  
        @Service  
        public class UserService {  
            private Map<String, String> usersData = new ConcurrentHashMap<String, String>();  
              
            public UserService(){  
                System.out.println("用户数据初始化..开始");  
                usersData.put("2", "玄玉");  
                usersData.put("3", "我的博客:http://blog.csdn.net/jadyer");  
                System.out.println("用户数据初始化..完毕");  
            }  
              
            //将查询到的数据缓存到myCache中,并使用方法名称加上参数中的userNo作为缓存的key  
            //通常更新操作只需刷新缓存中的某个值,所以为了准确的清除特定的缓存,故定义了这个唯一的key,从而不会影响其它缓存值  
            @Cacheable(value="myCache", key="'get'+#userNo")  
            public String get(String userNo){  
                System.out.println("数据库中查到此用户号[" + userNo + "]对应的用户名为[" + usersData.get(userNo) + "]");  
                return usersData.get(userNo);  
            }  
              
            @CacheEvict(value="myCache", key="'get'+#userNo")  
            public void update(String userNo){  
                System.out.println("移除缓存中此用户号[" + userNo + "]对应的用户名[" + usersData.get(userNo) + "]的缓存");  
            }  
              
            //allEntries为true表示清除value中的全部缓存,默认为false  
            @CacheEvict(value="myCache", allEntries=true)  
            public void removeAll(){  
                System.out.println("移除缓存中的所有数据");  
            }  
        }  
    View Code
    
    

    上述参考文章没有讲到的部分知识点,从@参考文章2找了些资料做补充

    @Caching注解可以让我们在一个方法或者类上同时指定多个Spring Cache相关的注解。其拥有三个属性:cacheable、put和evict,分别用于指定@Cacheable、@CachePut和@CacheEvict。
    
       @Caching(cacheable = @Cacheable("users"), evict = { @CacheEvict("cache2"),
    
             @CacheEvict(value = "cache3", allEntries = true) })
    
       public User find(Integer id) {
    
          returnnull;
    
       } 
    
    在支持Spring Cache的环境下,对于使用@Cacheable标注的方法,Spring在每次执行前都会检查Cache中是否存在相同key的缓存元素,如果存在就不再执行该方法,而是直接从缓存中获取结果进行返回,否则才会执行并将返回结果存入指定的缓存中。@CachePut也可以声明一个方法支持缓存功能。与@Cacheable不同的是使用@CachePut标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。
    
           @CachePut也可以标注在类上和方法上。使用@CachePut时我们可以指定的属性跟@Cacheable是一样的。
    
       @CachePut("users")//每次都会执行方法,并将结果存入指定的缓存中
    
       public User find(Integer id) {
    
          returnnull;
    
       } 
    View Code
    上述2步骤后,就可以愉快的使用了!~
  • 相关阅读:
    C# 将信息打印/输出到VS的“输出”窗口
    USB、UART、232串口通信和转换芯片
    UART/USB你必须知道的
    摄像头捕获视频流软件AMCAP使用教程(视频采集捕获处理媒体制作微型软件)
    Qt 线程关闭
    Qt 5种标准对话框及使用方法详解 QFileDialog、QcolorDialog、QFontDialog、QinputDialog、QMessageBox
    OpenCV 机器人手眼标定(九点标定法)
    如何打开svs文件
    OpenCV cvEstimateRigidTransform函数详细注解
    OpenCV 几何图像变换-cv::getAffineTransform(仿射变换)
  • 原文地址:https://www.cnblogs.com/yanan7890/p/6521990.html
Copyright © 2020-2023  润新知