zoukankan      html  css  js  c++  java
  • ehcache

    适用场景

    Ehcache直接在JVM虚拟机中缓存,速度快,效率高,但是缓存共享麻烦,适合单体架构数据缓存;

    引入依赖

    <!-- ehcache -->
    		<dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-cache</artifactId>
            </dependency>
            <dependency>
                <groupId>net.sf.ehcache</groupId>
                <artifactId>ehcache</artifactId>
            </dependency>
            <!-- ehcache -->
    

      

    开启缓存

    在启动类添加注解 @EnableCaching

    @EnableSwagger2Doc
    @EnableScheduling
    @EnableCaching
    @SpringBootApplication
    public class Application {
    
    	public static void main(String[] args) {
    		SpringApplication.run(Application.class, args);
    	}
    
    }
    

      

    添加配置文件(这步可跳过)

    也可不添加使用默认配置,默认配置可做参考,找到jar包下

    配置

    在src/main/resources目录下创建ehcache.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
    	updateCheck="false">
    	
    	<diskStore path="java.io.tmpdir/Tmp_EhCache" />
    	
    	<defaultCache eternal="false" maxElementsInMemory="1000"
    		overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0"
    		timeToLiveSeconds="100" memoryStoreEvictionPolicy="LRU" />
    
    	<cache name="SystemCache" eternal="false"
    		maxElementsInMemory="100" overflowToDisk="false"
    		diskPersistent="false" timeToIdleSeconds="0" timeToLiveSeconds="30"
    		memoryStoreEvictionPolicy="LRU" />
    
    </ehcache>
    

      

    配置说明

    (1).diskStore: 为缓存路径,ehcache分为内存和磁盘两级,此属性定义磁盘的缓存位置。参数解释如下:    
    
    user.home – 用户主目录
    
    user.dir  – 用户当前工作目录
    
    java.io.tmpdir – 默认临时文件路径
    
    (2).defaultCache:默认缓存策略,当ehcache找不到定义的缓存时,则使用这个缓存策略。只能定义一个。
    
    (3).cache:自定缓存策略,为自定义的缓存策略。参数解释如下:
    
    cache元素的属性:
    
    name:缓存名称
    
    maxElementsInMemory:内存中最大缓存对象数
    
    maxElementsOnDisk:硬盘中最大缓存对象数,若是0表示无穷大
    
    eternal:true表示对象永不过期,此时会忽略timeToIdleSeconds和timeToLiveSeconds属性,默认为false
    
    overflowToDisk:true表示当内存缓存的对象数目达到了maxElementsInMemory界限后,会把溢出的对象写到硬盘缓存中。注意:如果缓存的对象要写入到硬盘中的话,则该对象必须实现了Serializable接口才行。
    
    diskSpoolBufferSizeMB:磁盘缓存区大小,默认为30MB。每个Cache都应该有自己的一个缓存区。
    
    diskPersistent:是否缓存虚拟机重启期数据
    
    diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认为120秒
    
    timeToIdleSeconds: 设定允许对象处于空闲状态的最长时间,以秒为单位。当对象自从最近一次被访问后,如果处于空闲状态的时间超过了timeToIdleSeconds属性值,这个对象就会过期,EHCache将把它从缓存中清空。只有当eternal属性为false,该属性才有效。如果该属性值为0,则表示对象可以无限期地处于空闲状态
    
    timeToLiveSeconds:设定对象允许存在于缓存中的最长时间,以秒为单位。当对象自从被存放到缓存中后,如果处于缓存中的时间超过了 timeToLiveSeconds属性值,这个对象就会过期,EHCache将把它从缓存中清除。只有当eternal属性为false,该属性才有效。如果该属性值为0,则表示对象可以无限期地存在于缓存中。timeToLiveSeconds必须大于timeToIdleSeconds属性,才有意义
    
    memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。可选策略有:LRU(最近最少使用,默认策略)、FIFO(先进先出)、LFU(最少访问次数)。
    

      

    使用

    @Service
    public class CacheService {
    	
    	@Autowired
    	private UserService userService;
    	
    	@CachePut(value = RedisConstant.USER_ID, key = "#user.id")
    	public User save(User user) {
    		userService.save(user);
    		return user;
    	}
    	
    	@CacheEvict(value = RedisConstant.USER_ID)
        public boolean delete(Long id) {
    		return userService.removeById(id);
    	}
    	
    	@CachePut(value = RedisConstant.USER_ID, key = "#user.id")
        public User updata(User user) {
    		userService.updateById(user);
    		return user;
    	}
    	
    	@Cacheable(value = RedisConstant.USER_ID, key = "#id") 
        public User findOne(Long id) {
    		return userService.getById(id);
    	}
    	
    	@Cacheable(value = RedisConstant.USER_ID) 
        public List<User> findAll() {
    		return userService.list();
    	}
    	
    
    }
    

      

    1. @CachePut新增或更新数据时缓存数据;
    2. @CacheEvict删除数据时剔除缓存数据;
    3. @Cacheable根据key查找value中的值并将缓存数据返回,不指定key返回全部。
  • 相关阅读:
    论文笔记:目标检测算法(R-CNN,Fast R-CNN,Faster R-CNN,FPN,YOLOv1-v3)
    论文笔记:IRGAN——A Minimax Game for Unifying Generative and Discriminative Information
    springer论文模板参考文献的顺序问题
    CIFAR和SVHN在各CNN论文中的结果
    论文笔记:CNN经典结构2(WideResNet,FractalNet,DenseNet,ResNeXt,DPN,SENet)
    latex常用符号
    python中的引用传递,可变对象,不可变对象,list注意点
    ImageNet历年冠军和相关CNN模型
    matplotlib 的颜色
    调整matplotlib的图例legend的位置
  • 原文地址:https://www.cnblogs.com/yun965861480/p/12036320.html
Copyright © 2011-2022 走看看