guava 的cache比较好用。
 
 用户使用的对象是LoadingCache, 通过CacheBuilder来创建,通过

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的更多相关文章

  1. DBCacheServer升级

    前段时间完成了该服务的设计的功能,花了很多时间和经历,最终完成了一个版本,已经测试了:现在后期再次在以前的基础上,完成了一些扩展. 1.扩展了内存存储 最初版本只是采用了gauva cache进行存储 ...

  2. DBCacheServer服务升级

    前段时间完成了该服务的设计的功能,花了很多时间和经历,最终完成了一个版本,已经测试了:现在后期再次在以前的基础上,完成了一些扩展. 1.扩展了内存存储 最初版本只是采用了gauva cache进行存储 ...

  3. 【Distributed】缓存技术

    一.缓存概述 1.1 缓存技术分类 1.2 缓存框架分类 1.3 Session理解的误区 二.基于Map集合实现本地缓存 2.1 定义Map缓存工具类 2.2 使用案例 三.Ehcache 缓存框架 ...

  4. 手把手教学在Springboot中搭建使用Guava cache,包教包会,不会我输一包辣条给你

     guava cache使用简介 概述 缓存是日常开发中经常应用到的一种技术手段,合理的利用缓存可以极大的改善应用程序的性能. Guava官方对Cache的描述连接 缓存在各种各样的用例中非常有用.例 ...

  5. 使用Guava cache构建本地缓存

    前言 最近在一个项目中需要用到本地缓存,在网上调研后,发现谷歌的Guva提供的cache模块非常的不错.简单易上手的api:灵活强大的功能,再加上谷歌这块金字招牌,让我毫不犹豫的选择了它.仅以此博客记 ...

  6. ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core

    背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...

  7. [Java 缓存] Java Cache之 DCache的简单应用.

    前言 上次总结了下本地缓存Guava Cache的简单应用, 这次来继续说下项目中使用的DCache的简单使用. 这里分为几部分进行总结, 1)DCache介绍; 2)DCache配置及使用; 3)使 ...

  8. Spring cache简单使用guava cache

    Spring cache简单使用 前言 spring有一套和各种缓存的集成方式.类似于sl4j,你可以选择log框架实现,也一样可以实现缓存实现,比如ehcache,guava cache. [TOC ...

  9. 笔记:Memory Notification: Library Cache Object loaded into SGA

    笔记:Memory Notification: Library Cache Object loaded into SGA在警告日志中发现一些这样的警告信息:Mon Nov 21 14:24:22 20 ...

  10. ABP源码分析十三:缓存Cache实现

    ABP中有两种cache的实现方式:MemroyCache 和 RedisCache. 如下图,两者都继承至ICache接口(准确说是CacheBase抽象类).ABP核心模块封装了MemroyCac ...

随机推荐

  1. Win10 修改系统自带字体

    文章来源: Win10怎样更改系统字体?Win10默认字体修改教程 - 系统之家 (xitongzhijia.net) 苹方字体下载,window系统专用[2021最新版]免费下载 - 知乎 (zhi ...

  2. Django框架大全

    Django框架大全 django数据模型models中on_delete, db_constraint的使用 第一篇:Django简介 第二篇:Django之路由层 第三篇:Django之视图层 第 ...

  3. Git命令学习总结(廖雪峰官方Git教程)

        1.Windows系统安装完Git后,需要在Git Bash命令窗口输入以下命令,进行用户名和邮箱设置.

  4. SpringBoot代理图片、文件等路径

    在config文件夹下新增一个配置类即可 /** * @author cyl * @time 2022/10/25 */ @Configuration public class UrlConfig e ...

  5. liunx常用命令必备,持续更新

    inux中的命令的确是非常多,但是只需要掌握我们最常用的命令足够完成我们的工作了. 1.切换超级用户与普通用户 默认登录的是普通用户权限显示$符从普通用户切换超级用户权限:sudo su输入密码 从超 ...

  6. .NET CORE-IIS发布.netcore项目时报错:HTTP错误500.19-Internal Server Error

    最近IIS发布Core3.1项目的时候遇到下面问题,发现是缺少ASP.NET Core Runtime 解决方法:安装.netcore  host 版本

  7. class的知识点

    1. 在class类中,定义方法在constructor里面和外面的区别?? 定义在constructor里面是原型方法,定义在外边是实例方法.  里面的原型方法在new的时候会改变this指向 2. ...

  8. parse data from Nacos error

    SpringCloud Alibaba从Nacos读取配置文件. 在开发工具运行,没有问题,正常启动. 打包后,jar包启动 xxxx.jar,出现错误: 2022-10-11 11:20:25.28 ...

  9. FRP 反向代理渗透

    前言 之前在一个项目中遇到了一个渗透环境,只能使用工具代理远程访问内网,于是便接触了FRP这款内网穿透工具,通过内网反向代理进行远程渗透测试.这篇文章就简单介绍如何实现FRP反向代理渗透,作为个人笔记 ...

  10. pythonanywhere 部署 webpy

    ======================= start ===================== 1. 在pythonanywhere中Add a new web app. 2. 新开一个Bas ...