我是靠谱客的博主 酷酷白猫,最近开发中收集的这篇文章主要介绍Springboot整合ehcache及guava作为缓冲使用的方式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.ehcache缓存 

 需要添加依赖的jar
implementation 'net.sf.ehcache:ehcache:2.10.6'
implementation 'org.springframework.boot:spring-boot-starter-cache:2.1.2.RELEASE'
application.yml
#缓冲的配置
cache:
type: ehcache
ehcache:
config: classpath:ehcache.xml
然后,在springboot启动类添加启动缓冲注解 @EnableCaching

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">
<!--
java.io.tmpdir是获取操作系统缓存的临时目录,不同操作系统的缓存临时目录不一样
Windows: java.io.tmpdir:[C:Users登录用户~1AppDataLocalTemp]
Solaris: java.io.tmpdir:[/var/tmp/]
Linux/MACOS: java.io.tmpdir: [/tmp]
-->
<diskStore path="java.io.tmpdir"/>
<!-- 默认缓存 -->
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>
<!-- 定义缓存 时间设置2分钟-->
<cache name="table1Cache"
maxElementsInMemory="1000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="false"
memoryStoreEvictionPolicy="LRU"/>
<!-- maxElementsInMemory 内存中最大缓存对象数,看着自己的heap大小来搞 -->
<!-- eternal:true表示对象永不过期,此时会忽略timeToIdleSeconds和timeToLiveSeconds属性,默认为false -->
<!-- maxElementsOnDisk:硬盘中最大缓存对象数,若是0表示无穷大 -->
<!-- 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(最少访问次数)。-->
</ehcache>
import com.syiass.domain.TagInfo;
import com.syiass.repository.TagInfoRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Repository;
import java.util.List;
//标注数据访问组件,即DAO组件
/*
参数 value缓存的名称必须指定至少一个
缓存的key可以为空
eg: key 定义的id是传入的数值
@Cacheable(value=”testcache”,key=”#id”)
*/
// cacheNames为ehcache.xml配置文件内的配置名称
@CacheConfig(cacheNames = {"table1Cache"})
@Repository
public class TaginfoEhcache {
@Autowired
private TagInfoRepository tagInfoRepository;
/*
@Cacheable:应用到读取数据的方法上,即可缓存的方法,
如查找方法:先从缓存中读取,如果没有再调用方法获取数据,
然后把数据添加到缓存中,适用于查找;
value 指的是 ehcache.xml 中的缓存策略 既name的数值
*/
@Cacheable(value= "table1Cache")
public List<TagInfo> getAllList(){
return
tagInfoRepository.getAllList();
}
}

   2.guava缓冲

分别是maven和gradle依赖

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>20.0</version>
  <type>bundle</type>
</dependency>

implementation 'com.google.guava:guava:20.0'

封装工具类

package com.syiaas.common;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.concurrent.TimeUnit;
public class TokenCache {
private static Logger logger = LoggerFactory.getLogger(TokenCache.class);
public static final String TOKEN_PREFIX = "token_";
// guava本地缓冲 设置缓冲最大容量,若超过会采用LRU算法就是最少使用移除缓冲项 过期时间12个小时
private static LoadingCache<String,String> localCache = CacheBuilder.newBuilder().initialCapacity(1000)
.maximumSize(10000).expireAfterAccess(12, TimeUnit.HOURS)
.build(new CacheLoader<String, String>() {
//默认的数据加载实现,当调用get取值的时候,如果key没有对应的值,就调用这个方法进行加载
@Override
public String load(String s) throws Exception {
return "null";
}
});
public static void setKey(String key,String value){
localCache.put(key,value);
}
public static String getKey(String key){
String value = null;
try {
value = localCache.get(key);
if ("null".equals(value)){
return null;
}
return value;
}catch (Exception e){
logger.error("localCache get error",e);
}
return null;
}
}

 

    

转载于:https://my.oschina.net/shanesen/blog/3017690

最后

以上就是酷酷白猫为你收集整理的Springboot整合ehcache及guava作为缓冲使用的方式的全部内容,希望文章能够帮你解决Springboot整合ehcache及guava作为缓冲使用的方式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部