gauva cache
CacheLoader来根据key加载数据。而且可以定时刷新缓存(有访问才异步刷新缓存,可以让缓存自动过期。)
package testjava; import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.ListenableFutureTask; import java.util.concurrent.*; /**
* Create with test01
* Auther: hp.wang on 2017/9/22
* DateTime: 2017/9/22 13:20
*/
public class testCache {
static ExecutorService executor = Executors.newFixedThreadPool(10);
static Integer i1=0;
public static void main(String[] args) throws InterruptedException, ExecutionException {
// Some keys don't need refreshing, and we want refreshes to be done asynchronously.
LoadingCache<String, String> cache = CacheBuilder.newBuilder()
.maximumSize(1000)
.expireAfterAccess(7, TimeUnit.SECONDS)
.refreshAfterWrite(2, TimeUnit.SECONDS)
.build(
new CacheLoader<String, String>() {
public String load(String key) { // no checked exception
return "load";
} public ListenableFuture<String> reload(final String key, String prevGraph) { // asynchronous!
ListenableFutureTask<String> task = ListenableFutureTask.create(new Callable<String>() {
final int i = 0; public String call() throws Exception {
Thread.sleep(152);
i1 = i1 + 1;
System.out.println("reloading." + i1);
return "reload value:" + i1;
}
});
executor.execute(task);
return task; }
}); for (int i = 0; i < 10; i++) {
Thread.sleep(1000);
System.out.println(cache.get("aa"));
}
System.out.println("=== wait for expired. ================");
Thread.sleep(10000); for (int i = 0; i < 10; i++) {
Thread.sleep(1000);
System.out.println(cache.get("aa"));
}
System.out.println("===================");
}
}
output:
===============================
load
load
load
reloading.1
reload value:1
reload value:1
reload value:1
reloading.2
reload value:2
reload value:2
reload value:2
reloading.3
reload value:3
=== wait for expired. ================
load
load
load
load
reloading.4
reload value:4
reload value:4
reload value:4
reloading.5
reload value:5
reload value:5
reload value:5
===================
reloading.6
gauva cache的更多相关文章
- DBCacheServer升级
前段时间完成了该服务的设计的功能,花了很多时间和经历,最终完成了一个版本,已经测试了:现在后期再次在以前的基础上,完成了一些扩展. 1.扩展了内存存储 最初版本只是采用了gauva cache进行存储 ...
- DBCacheServer服务升级
前段时间完成了该服务的设计的功能,花了很多时间和经历,最终完成了一个版本,已经测试了:现在后期再次在以前的基础上,完成了一些扩展. 1.扩展了内存存储 最初版本只是采用了gauva cache进行存储 ...
- 【Distributed】缓存技术
一.缓存概述 1.1 缓存技术分类 1.2 缓存框架分类 1.3 Session理解的误区 二.基于Map集合实现本地缓存 2.1 定义Map缓存工具类 2.2 使用案例 三.Ehcache 缓存框架 ...
- 手把手教学在Springboot中搭建使用Guava cache,包教包会,不会我输一包辣条给你
guava cache使用简介 概述 缓存是日常开发中经常应用到的一种技术手段,合理的利用缓存可以极大的改善应用程序的性能. Guava官方对Cache的描述连接 缓存在各种各样的用例中非常有用.例 ...
- 使用Guava cache构建本地缓存
前言 最近在一个项目中需要用到本地缓存,在网上调研后,发现谷歌的Guva提供的cache模块非常的不错.简单易上手的api:灵活强大的功能,再加上谷歌这块金字招牌,让我毫不犹豫的选择了它.仅以此博客记 ...
- ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core
背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...
- [Java 缓存] Java Cache之 DCache的简单应用.
前言 上次总结了下本地缓存Guava Cache的简单应用, 这次来继续说下项目中使用的DCache的简单使用. 这里分为几部分进行总结, 1)DCache介绍; 2)DCache配置及使用; 3)使 ...
- Spring cache简单使用guava cache
Spring cache简单使用 前言 spring有一套和各种缓存的集成方式.类似于sl4j,你可以选择log框架实现,也一样可以实现缓存实现,比如ehcache,guava cache. [TOC ...
- 笔记:Memory Notification: Library Cache Object loaded into SGA
笔记:Memory Notification: Library Cache Object loaded into SGA在警告日志中发现一些这样的警告信息:Mon Nov 21 14:24:22 20 ...
- ABP源码分析十三:缓存Cache实现
ABP中有两种cache的实现方式:MemroyCache 和 RedisCache. 如下图,两者都继承至ICache接口(准确说是CacheBase抽象类).ABP核心模块封装了MemroyCac ...
随机推荐
- Solidity8.0-02
对应崔棉大师 26-40课程https://www.bilibili.com/video/BV1yS4y1N7yu/?spm_id_from=333.788&vd_source=c81b130 ...
- java的%d和%f 是什么意思
Java中,%d和%f分别用来表示输出时,替换整型输出和浮点型输出的占位符. 如: int a=28; float b = 13.0f; System.out.printf("整数是:%d% ...
- LinuxK8S集群搭建一(Master节点部署)
系统环境: CentOS 7 64位 准备工作: 通过虚拟机创建三台CentOS服务器,可参照之前的文章:Windows10使用VMware安装centos192.168.28.128 --maste ...
- libvirtd升级
如果对图形化界面没有诉求,能够使用命令行进行虚拟化相关操作,建议使用系统自 带的libvirt-4.5.0. 由于libvirt-4.5.0代码存在bug,所以在使用virt-manager时会触发一 ...
- MapReduce原理——切片代码分析
(1)程序先找到数据存储的目录 (2)遍历目录对每个文件进行切片 (3)遍历一个文件: 获取文件大小 计算切片大小 默认情况下,切片大小等于blocksize 每次切片时都要判断剩下部分师否大于块的1 ...
- laravel-hash表的简单使用
- C#中实现类型对foreach的支持
代码实现: 首先创建用来遍历的类 class Car { public string name; public int age; } public class Cars: IEnumerable { ...
- Gitlab迁移(亲测)
1. 概述 当前gitlab部署在k8s内,根据基础设施设计此处不合理,需将gitlab迁移至主机部署的gitlab 当前位置:k8s 集群 迁移后位置:云主机部署gitlab 2. Gitlab从K ...
- SVN 提交失败 Unexpected HTTP status 200 'OK' on 'PUT' request to
提交SVN 时 提示 Commit Failed Unexpected HTTP status 200 'OK' on 'PUT' request to 旧的文件在SVN 上也无法删除,删除文件 ...
- SimplCommerce 核心
EF配置 using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks ...