Caffeine Cache

news2025/2/25 3:46:10

Caffeine Cache

高性能的 Java本地缓存库
底层使用 ConcurrentHashMap

TinyLFU

一个近乎最佳的命中率

LRU:最近最少使用算法,每次访问数据都会将其放在我们的队尾,如果需要淘汰数据,就只需要淘汰队首即可。容易导致了热点数据被淘汰。

LFU:最近最少频率使用,利用额外的空间记录每个数据的使用频率,然后选出频率最低进行淘汰。这样就避免了 LRU 不能处理时间段的问题,但实现成本高于lru
虽然命中率很高。但是热点数据访问量太高了,新数据无法淘汰他们,后期访问较多的记录则无法被命中。有一定局限性。

W-TinyLFU

TinyLFU维护了近期访问记录的频率信息,作为一个过滤器,当新记录来时,只有满足TinyLFU要求的记录才可以被插入缓存。如前所述,作为现代的缓存,它需要解决两个挑战:

  • 如何避免维护频率信息的高开销
  • 如何反应随时间变化的访问模式

W-TinyLFU(Window Tiny Least Frequently Used)是对LFU的的优化和加强。

  • 算法:当一个数据进来的时候,会进行筛选比较,进入W-LRU窗口队列,以此应对流量突增,经过淘汰后进入过滤器,通过访问访问频率判决是否进入缓存。如果一个数据最近被访问的次数很低,那么被认为在未来被访问的概率也是最低的,当规定空间用尽的时候,会优先淘汰最近访问次数很低的数据;
  • 优点:使用Count-Min Sketch算法存储访问频率,极大的节省空间;定期衰减操作,应对访问模式变化;并且使用window-lru机制能够尽可能避免缓存污染的发生,在过滤器内部会进行筛选处理,避免低频数据置换高频数据。

数据流Sketching技术,使用Count-Min Sketch记录我们的访问频率,
而这个也是布隆过滤器的一种变种
假如我们用一个hashmap来存储每个元素的访问次数,那这个量级是比较大的,并且hash冲突的时候需要做一定处理,否则数据会产生很大的误差,Count-Min Sketch算法将一个hash操作,扩增为多个hash,这样原来hash冲突的概率就降低了几个等级,且当多个hash取得数据的时候,取最低值

下图展示了Count-Min Sketch算法简单的工作原理:

  1. 假设有四个hash函数,每当元素被访问时,将进行次数加1;
  2. 此时会按照约定好的四个hash函数进行hash计算找到对应的位置,相应的位置进行+1操作;
  3. 当获取元素的频率时,同样根据hash计算找到4个索引位置;
  4. 取得四个位置的频率信息,然后根据Count Min取得最低值作为本次元素的频率值返回,即Min(Count);

在这里插入图片描述

回收策略

Caffeine提供了3种回收策略:基于大小回收,基于时间回收,基于引用回收。

  1. 基于大小的过期方式
    基于大小的回收策略有两种方式:一种是基于缓存大小,一种是基于权重。
  2. 基于时间的过期方式
  3. 基于引用的过期方式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1087955.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

『heqingchun-ubuntu系统下安装nvidia显卡驱动3种方法』

ubuntu系统下安装nvidia显卡驱动3种方法 一、安装依赖 1.更新 sudo apt updatesudo apt upgrade -y2.基础工具 sudo apt install -y build-essential python图形界面相关 sudo apt install -y lightdm注:在弹出对话框选择"lightdm" 二、第一种:使用…

如何构建安全的App网络通信?

前言 说到安全肯定逃不开数据的加解密,数据本地存储大多用对称加解密来实现,那网络传输数据的时候是不是也用对称加解密来实现?没错,常规网络通信时,大部分网络传输过程中基本也是用对称加解密来实现的,毕竟…

工程师必须记住的电路元件符号及英语翻译

很多电子小白第一次接触印刷电路板(PCB)时,总会头痛那些密密麻麻的元件字母符号,这些电路元件符号基本上都是采用英语缩写,下面我们来看看这些电路元件的英语符号有哪些? 电阻器(Resistor&#…

fl studio21最新汉化破解版中文解锁下载完整版本

FL Studio 21 中文版是最受欢迎的音乐更改程序。这个工具可以改变和制作任何音乐或节奏。它还具有许多新功能,例如 Direct Wave 升级、对 Fruity Reverb 的 64 位支持,以及具有 125 个轨道的扩展混音器,可改善播放列表(Playlist&a…

软考中级和高级,有什么区别?

软考是指软件技术人员职业资格考试,是由国家人力资源和社会保障部主管的全国性考试。软考分为初级、中级和高级三个等级,其中中级和高级是较为高级的考试等级。那么,软考中级和高级有什么区别呢?本文将从以下几个方面进行阐述。 …

CVE-2020-9483 apache skywalking SQL注入漏洞

漏洞概述 当使用H2 / MySQL / TiDB作为Apache SkyWalking存储时,通过GraphQL协议查询元数据时,存在SQL注入漏洞,该漏洞允许访问未指定的数据。 Apache SkyWalking 6.0.0到6.6.0、7.0.0 H2 / MySQL / TiDB存储实现不使用适当的方法来设置SQL参…

爆肝整理,Jmeter接口性能测试-跨线程调用变量实操(超详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、Jmeter中线程运…

可观测性数据收集集大成者 Vector 介绍

如果企业提供 IT 在线服务,那么可观测性能力是必不可少的。“可观测性” 这个词近来也越发火爆,不懂 “可观测性” 都不好意思出门了。但是可观测性能力的构建却着实不易,每个企业都会用到一堆技术栈来组装建设。比如数据收集,可能…

微信页面公众号页面 安全键盘收起后页面空白

微信浏览器打开H5页面和公众号页面,输入密码时调起安全键盘,键盘收起后 键盘下方页面留白 解决办法: 1、(简单)只有在调起安全键盘(输入密码)的时候会出现这种情况,将input属性改为n…

基于Springboot实现校园疫情登记防控系统项目【项目源码+论文说明】计算机毕业设计

基于Springboot实现校园疫情登记平台系统演示 摘要 2019年12月19号中国武汉发生第一例新冠病毒的到来,大家都在听从政府的号召在居家隔离,不管是在城市还是在乡镇、农村,这引起我的注目,设计一套校园疫情防控系统,疫情…

记一次fineBI的增量删除更新BUG

官方文档链接是https://help.fanruan.com/finebi/doc-view-1663.html 按照官方文档,增量删除不能使用select * ,且需要指定分区建 但实际指定分区键有时候也会报错,因为表设置的字段有时候会比数据源少,此时会报错,提…

一键部署开源AI(人工智能对话模型)(支持显卡或CPU加内存运行)--ChatGLM-6B

一、基本介绍: 基于ChatGLM-6B 的快速安装服务,支持一键安装,无需任何服务配置和代码编写即可完成。 ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数…

js实现日历 完整版

<template><div id"calendar"><!-- 年份 月份 --><div class"title"><div class"label">活动日历</div><div class"total">当前活动 {{ list.length }} 场</div></div><div…

云化XR和沉浸式全息交互技术的探索与思考

// 编者按&#xff1a;计算机图形与仿真技术的发展为人类带来了众多的沉浸式技术。虚拟现实&#xff08;VR&#xff09;、增强现实&#xff08;AR&#xff09;、混合现实&#xff08;MR&#xff09;等技术通过不同程度数字信息与现实环境的融合&#xff0c;为用户带来了全新体…

clickhouse数据库简介,列式存储

clickhouse数据库简介 1、关于列存储 所说的行式存储和列式存储&#xff0c;指的是底层的存储形式&#xff0c;数据在磁盘上的真实存储&#xff0c;至于暴漏在上层的用户的使用是没有区别的&#xff0c;看到的都是一行一行的表格。 idnameuser_id1闪光10266032轨道物流10265…

【计算机毕设选题推荐】幼儿园管理系统SpringBoot+SSM+Vue

前言&#xff1a;我是IT源码社&#xff0c;从事计算机开发行业数年&#xff0c;专注Java领域&#xff0c;专业提供程序设计开发、源码分享、技术指导讲解、定制和毕业设计服务 项目名 基于SpringBoot的幼儿园管理系统 技术栈 SpringBootSSMVueMySQLMaven 文章目录 一、幼儿园管…

记录一个@Transaction注解引发的bug

记录一个Transactional(readOnly true)注解引发的bug 一、问题代码和报错 1-1 问题代码模拟 引发这个问题的三大要素分别是&#xff1a; 事务注解任意数据库操作数据库操作后执行耗时业务&#xff08;耗时超过数据库配置的超时时间&#xff09; //1.这里是问题的核心之一…

基于springboot实现实验室管理系统项目【项目源码+论文说明】

摘要 社会的发展和科学技术的进步&#xff0c;互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱&#xff0c;也逐渐进入了每个用户的使用。互联网具有便利性&#xff0c;速度快&#xff0c;效率高&#xff0c;成本低等优点。 因此&#xff0c;构建符合…

淘宝商品销量数据接口,淘宝API接口

淘宝商品销量数据接口是淘宝开放平台提供的一种API接口&#xff0c;通过该接口&#xff0c;商家可以获取到淘宝平台上的商品销量数据。 淘宝商品销量数据接口可以用于获取特定商品的销量数据、特定店铺的销量数据、特定类目的销量数据等。商家可以根据自己的需求来调用该接口&…

python基础教程:print()函数知识点总结

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 print() 方法用于打印输出 语法&#xff1a; print(*objects, sep , end\n, filesys.stdout, flushFalse)参数 objects – 复数&#xff0c;表示可以一次输出多个对象。输出多个对象时&#xff0c;需要用 , 分隔。 sep – …