当前位置: 首页 > article >正文

Guava Cache

Guava Cache

  • 单应用、本地缓存
  • 依赖
		<dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>30.1-jre</version> 
        </dependency>
  • 示例
import com.google.common.cache.*;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;


public class LocalCache {
    public static void main(String[] args) throws ExecutionException {
//     LoadingCache 在缓存项不存在时可以自动加载缓存
        LoadingCache<String,Object> loadingCache
//               CacheBuilder 构造私有,只能通过静态方法 newBuilder()来获取CacheBuilder的实例
                = (LoadingCache<String, Object>) CacheBuilder.newBuilder()
//                设置并发级别8;同时写缓存的线程数为8
                .concurrencyLevel(8)
//                写缓存后8秒过期
                .expireAfterWrite(8, TimeUnit.SECONDS)
//                写缓存后1秒刷新
                .refreshAfterWrite(1,TimeUnit.SECONDS)
//                缓存初始容量 10
                .initialCapacity(10)
//                缓存最大容量100,超过100之后会按照LRU最近最少使用算法移除缓存项
                .maximumSize(100)
//                设置要统计缓存的命中率
                .recordStats()
//                缓存的移除通知
                .removalListener(new RemovalListener<String, Object>() {
                    @Override
                    public void onRemoval(RemovalNotification<String, Object> removalNotification) {
                        System.out.println(removalNotification.getKey() + "被移除,原因:" + removalNotification.getCause());
                    }
                }).build(
                        new CacheLoader<String, Object>() {
                            @Override
                            public Object load(String key) throws Exception {
                                System.out.println("缓存不存在时,从数据加载"+key);
//                                todo 记载数据,返回对应数据
                                return new Object();
                            }
                        }
                );
//        第一次读取,会加载数据
        for (int i = 0; i < 20; i++) {
            Object o = loadingCache.get(i + "");
            System.out.println(o);
        }
//        第二次读取,直接用
        for (int i = 0; i < 20; i++) {
            Object o = loadingCache.get(i + "");
            System.out.println(o);
        }
        System.out.println("缓存命中率:"+loadingCache.stats());

    }
}


http://www.kler.cn/a/398281.html

相关文章:

  • AtCoder Beginner Contest 380(A-F)
  • lua-lru缓存算法解析
  • 摘要与登记
  • 图像深度与像素深度的辨析
  • 计算2的N次方
  • Azure pipeline 通过git命令修改文件
  • SQLI LABS | Less-51 GET-Error Based-ORDER BY CLAUSE-String-Stacked Injectiion
  • 图像分割——Hough变换检测法
  • C语言——判断是不是字母
  • YOLOv7-0.1部分代码阅读笔记-train.py
  • SQLite 安装指南
  • MAC上的Office三件套报53错误解决方案(随笔记)
  • 【MogDB】MogDB5.2.0重磅发布第八篇-支持PLSQL编译全局缓存
  • 如何在 Ubuntu 上安装 Mattermost 团队协作工具
  • 【ArcGIS微课1000例】0127:计算城市之间的距离
  • 9.2 使用haarcascade_frontalface_default.xml分类器检测视频中的人脸,并框出人脸位置。
  • 企业项目级IDEA设置类注释、方法注释模板(仅增加@author和@date)
  • 你的服务器缓存中毒过么?
  • Essential Cell Biology--Fifth Edition--Chapter one (8)
  • ssm126基于HTML5的出租车管理系统+jsp(论文+源码)_kaic
  • 牛客周赛第一题2024/11/17日
  • 深入理解Flutter生命周期函数之StatefulWidget(一)
  • 【Qt聊天室】客户端实现总结
  • 华为欧拉系统使用U盘制作引导安装华为欧拉操作系统
  • Kubernetes 10 问,测测你对 k8s 的理解程度
  • 【设计模式】入门 23 种设计模式(代码讲解)