IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Guava使用 -> 正文阅读

[开发测试]Guava使用

Guava使用

Guava Cache 是Google Fuava中的一个内存缓存模块,用于将数据缓存到JVM内存中。
提供了get、put封装操作,能够集成数据源 ;
线程安全的缓存,与ConcurrentMap相似,但前者增加了更多的元素失效策略,后者只能显示的移除元素,相当于对已有集合框架类的一个扩充;
Guava Cache提供了多种基本的缓存回收方式
监控缓存加载/命中情况
通常,Guava缓存适用于以下情况:

愿意花费一些内存来提高速度。
使用场景有时会多次查询key。
缓存将不需要存储超出RAM容量的数据

比如端面要将某一个类型Code转为类型名称
这个类型数量比较多,有可能发生变动但不频繁的情景

比如端面需要根据填报志愿的专业code获取专业名称
如果返回实体不带Name,每个调一次查询服务,或者一次性拿出所有名称循环对比取显然不是很优雅
就可以用Guava来实现

/** 引入如下依赖
<dependency>
	<groupId>com.google.guava</groupId>
	<artifactId>guava</artifactId>
	<version>18.0</version>
</dependency>
*/
public class GuavaTest {
    
    private LoadingCache<Integer, String> inventoryCacheByCondition = CacheBuilder.newBuilder().
            // 设置过期时间
                    expireAfterWrite(5L, TimeUnit.SECONDS).
            // 初始容量,扩容非常消耗资源这个一定规划好合适大小
                    initialCapacity(256).
            // 最大容量
                    maximumSize(1024L).
                    build(new CacheLoader<Integer, String>() {
                        /*
                         * 如果出现缓存没命中到场景会调用到load
                         * 实际场景这里处理不好极有可能oom要注意
                         */
                        @Override
                        public String load(Integer key) throws Exception {
                            System.out.println("调用load重新加载缓存");
                            reflushInventoryType(inventoryCacheByCondition, 0);
                            return inventoryCacheByCondition.get(key);
                        }
                    });
    public static void main(String[] args) throws ExecutionException, InterruptedException {

        GuavaTest test = new GuavaTest();
        System.out.println("=====================================第一次查缓存");
        System.out.println(test.inventoryCacheByCondition.get(6));
        System.out.println("=====================================缓存持续时间内查询");
        System.out.println(test.inventoryCacheByCondition.get(6));
        TimeUnit.SECONDS.sleep( 5 );
        System.out.println("=====================================我睡了5s,缓存过期啦");
        System.out.println(test.inventoryCacheByCondition.get(6));
        test.reflushInventoryType(test.inventoryCacheByCondition, 0);
        System.out.println("=====================================遍历map");
        test.fun(test);

    }

    public void fun(GuavaTest test){
        test.inventoryCacheByCondition.asMap().forEach((key,value)->{
            System.out.println(key + value);
        });
    }

    private void reflushInventoryType(LoadingCache<Integer, String> inventoryCacheByCondition
            ,Integer queryType){
        inventoryCacheByCondition.put(1,"value1");
        inventoryCacheByCondition.put(2,"value2");
        inventoryCacheByCondition.put(3,"value3");
        inventoryCacheByCondition.put(4,"value4");
        inventoryCacheByCondition.put(5,"value5");
        inventoryCacheByCondition.put(6,"value6");
    }
}

结果

=====================================第一次查缓存
调用load重新加载缓存
value6
=====================================缓存持续时间内查询
value6
=====================================我睡了5s,缓存过期啦
调用load重新加载缓存
value6
=====================================遍历map
5value5
6value6
2value2
1value1
4value4
3value3

神秘连接,还有其他好康的
https://mp.weixin.qq.com/s?__biz=MzU4Mzg0Njg5Ng==&mid=2247483760&idx=1&sn=4f54670637df1b810999e863f45ae4dc&chksm=fda39fefcad416f939cf64d5c7209239d49cc6d02a81fa92405ba4f7fc32068f5e0e5f0d947c&token=150939616&lang=zh_CN#rd

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 17:52:26  更:2022-03-12 17:52:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 0:36:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码