初步认识Ehcache清空缓存的3种策略

2023-11-13

Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。
在一些项目中可能会用到这个缓存框架,这是我们就需要进行spring和ehcache的整合,在整合过程中通常需要在ehcahe.xml中进行如下配置

这里写图片描述

在配置文件中参数”memoryStoreEvictionPolicy”指定了缓存的清空策略,当maxElementsInMemory达到限制时会根据指定的策略进行清空缓存。
缓存的清空策略一共有三种:
LRU(Least Recently Used):最近最少使用
LFU(Leats Frequently Uesd):最不经常使用
FIFO(First in First Out):先进先出
下面将会对这三种算法做详细的说明:

LRU(最近最少使用)
lru:根据数据的历史访问记录进行淘汰数据,它的基本思想是”如果数据最近被访问的次数多,那么在将来被访问的几率也会大一些。”我们只需要在每次调换时,找到最近最久使用的那个页面调出内存。这就是LRU算法的全部内容。
LRU算法的淘汰过程如下:
假设序列:4 3 4 2 3 1 4 2
假设物理块有3个
这里写图片描述
LRU一般采用链表的方式实现,便于快速移动数据的位置,一开始缓存池是空的,往缓存池中插入数据的时候不用担心容量不足的问题,在第四步的时候缓存池已经满了(在实际应用的时候不会让到达缓存的尺寸的,一般70%左右就开始考虑淘汰机制了),在第五步的时候从缓存池访问数据“3”,数据“3”被访问从时间点上来看是最近被访问的,将3移动到链表的顶端。在第六步的时候,数据“1”进入缓存池发现缓存池已满,按照LRU淘汰算法的原则把数据“4”淘汰,将数据“1”插入缓存池中。
LRU算法的缺陷就是仅从时间上来考虑有可能会淘汰仍然有价值的单元。

LFU(最不经常使用)
LFU:根据数据的历史访问频率来淘汰数据,它的核心思想就是“如果数据过去被访问多次,那么未来被访问的频率也更高”。
实现:LFU每个数据块都有一个引用计数,所有数据块按照引用计数排序,具有相同的计数的数据块按照时间来排序。
LFU算法的淘汰过程如下:
这里写图片描述
图中红色字体为每个数据被访问的次数,被访问的次数多的放在顶部(如果数据被访问的次数相同,则按照时间进行排序,最近被访问的排在上面)。
在第三步的时候3和4被访问的次数都为“1”,当访问次数相同时按照时间进行排序,在第六步的时候,数据“1”进入但是此时缓存池已满(此时数据“2”被访问次数最好)按照LFU算法淘汰原则数据“2”被淘汰。

FIFO(先进先出)
FIFO:根据数据块进入缓存池的顺序进行淘汰,它的基本思想就是“先进入缓存池的数据先被淘汰”,符合队列的特性,数据结构上使用队列(Queue)来实现。
FIFO算法淘汰过程如下:
这里写图片描述
在第四步数据“2”进入后此时缓存池已满,当进行到第五步时3进入并没有淘汰任何数据,因为此时缓存池已经存在数据“3”所以对缓存池中的“3”进行调用,当进行到第六步“1”进入的时候,由于此时的缓存池已满并且缓存池中还不存在数据“1”,所以要进行淘汰,根据“先进先出”的原则淘汰的是数据“4”。

以上就是我对ehcahe清空缓存的3种策略的初步理解,如有不对欢迎指正。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

初步认识Ehcache清空缓存的3种策略 的相关文章

  • FIFO深度计算问题

    FIFO深度计算公式 xff1a fifo depth 61 burst length burst length X Y r clk w clk burst length xff1a 突发数据个数 X Y xff1a 读时钟周期里 xff0
  • 同步FIFO 两种方法

    RAM 43 空满信号判断 xff0c 两种方法 一 空满标志用指针位置得到 二 空满标志用fifo的中数据的计数得到 一 当写指针超过读指针一圈 xff0c 写满 xff1b 写指针等于读指针 xff0c 读空 96 timescale
  • OV7670无FIFO读寄存器成功

    使用stm32f103zet6 接3V3 GND SIOC 接PD0 xff0c SIOD接PD1 XCLK接PA8 SCCB c include 34 SCCB h 34 define SCCB SCL PDout 0 define SC
  • FIFO队列(First In First Out)和优先队列

    queue lt 类型名 gt q q size 返回队列中元素个数 q empty 若队列为空 xff0c 返回true xff0c 否则返回false q pop 删除队首元素 xff0c 但不返回其值 q front 返回队首元素的值
  • DSP28335使用FIFO的串口中断总结

    一 串行通信与并行通信 DSP控制器间 xff0c DSP控制器与外部设备间交换信息 xff0c 通信 xff0c 可采取的通信方式主要两大类1 串行通信 2 并行通信 并行通信一般包括多条数据线 多条控制线和状态线 xff0c 传输速度快
  • (转)stm32F4-----DMA的FIFO作用和用法

    在STM32F4系列中DMA增加了个FIFO 这个FIFO的作用是什么 xff1f 当我使能这个FIFO时 xff08 DMA InitStructure DMA FIFOMode 61 DMA FIFOMode Enable xff09
  • DSP28335 SCI FIFO深度设置

    SCI工作在FIFO模式下一般是因为所传输的信息并不是以一个字节为单位 xff0c 而是以多个字节组成的一个包为单位的 如果一包数据包括10个字节 xff0c 可以设置FIFO接收中断为10个字节时产生中断 设置以后 xff0c 每接收到1
  • FPGA原理与结构——FIFO IP核的使用与测试

    一 前言 本文介绍FIFO Generator v13 2 IP核的具体使用与例化 在学习一个IP核的使用之前 首先需要对于IP核的具体参数和原理有一个基本的了解 具体可以参考 FPGA原理与结构 FIFO IP核原理学习https blo
  • 146. LRU Cache

    1 The key to solve this problem is using a double linked list which enables us to quickly move nodes 2 The LRU cache is
  • FIFO最小深度计算

    FIFO最小深度计算 文章目录 1 FIFO最小深度 2 示例分析 1 FIFO最小深度 在数据的传输中当读速率慢于写速率时 FIFO便可被用作系统中的缓冲元件或队列 类似于水流经过一个缓冲区 上游水流速度快 下游水流速度慢 部分水就可以被
  • Xilinx FIFO Generator 需要注意RST复位

    Xilinx FIFO Generator 需要注意RST复位 系列文章推荐 Xilinx FIFO Generator 需要注意RST复位 Xilinx FIFO Generator 需要注意Actual Depth Xilinx FIF
  • memcached server LRU 深入分析

    Memcached 人所皆知的remote distribute cache 不知道的可以javaeye一下下 或者google一下下 或者baidu一下下 但是鉴于baidu的排名商业味道太浓 从最近得某某事件可以看出 所以还是建议jav
  • LRU缓存设计

    最近最少使用 LRU 缓存是先丢弃最近最少使用的项 如何设计和实现这样一个缓存类 设计要求如下 1 尽快找到该项目 2 一旦缓存未命中并且缓存已满 我们需要尽快替换最近最少使用的项 如何从设计模式和算法设计角度来分析和实现这个问题 链表 指
  • CPU 中的 LRU 缓存是如何实现的?

    我正在为面试做准备 想重温一下我对缓存的记忆 如果CPU有一个带有LRU替换策略的缓存 那么它在芯片上实际上是如何实现的呢 每个缓存行会存储一个时间戳记吗 另外 在双核系统中两个 CPU 同时写入同一个地址时会发生什么情况 对于只有两种路的
  • Python:构建 LRU 缓存

    我身边有6 00 000 entries in MongoDB采用以下格式 feature category count where feature可以是任何词 category为正或负 并且 count告诉某个功能在该类别的文档中出现了多
  • SQL 先进先出忠诚点

    各位开发人员和分析师 我在 SQL 方面有一些经验 并且已经求助于类似的帖子 然而 这有点小众 预先感谢您的帮助 我有以下数据集 已编辑 道歉 Setup CREATE TABLE CustomerPoints CustomerID INT
  • 如何保证 ThreadPoolExecutor 中的 FIFO 执行顺序

    我用这行代码创建一个 ThreadPoolExecutor private ExecutorService executor new ThreadPoolExecutor 5 10 120 TimeUnit SECONDS new Arra
  • 检测程序何时打开 fifo

    我遇到一种情况 我需要检查 fifo 的另一侧是否已打开它 但是我不能使用 open 因为否则程序将开始执行操作 为什么我必须这样做 我有一个程序 监视器 来启动服务器程序 都是我创建的 监视器使用此 fifo 进行通信 因为监视器可以在服
  • C# 生产质量线程安全内存中 LRU 缓存是否过期?

    这也许就像求棒上的月亮一样 但是是否有 C 生产质量的线程安全内存中 LRU 缓存 带过期 或者有人有最佳实践想法来实现同样的事情吗 LRU 是 最近最少使用 http en wikipedia org wiki Cache algorit
  • 如何在命名管道 (mkfifo) 上执行非阻塞 fopen?

    如果我有一个程序使用 mkfifo 创建并尝试打开命名管道 如何在不阻塞的情况下打开管道进行读取或写入 具体来说 我正在编写一个 C 程序 它可以在有或没有 GUI 的情况下运行 用 Java 编写 在 C 程序中 我使用 mkfifo 成

随机推荐

  • 【数据结构和算法】字符串操作

    作者 Linux猿 简介 CSDN博客专家 华为云享专家 Linux C C 云计算 物联网 面试 刷题 算法尽管咨询我 关注我 有问题私聊 关注专栏 数据结构和算法成神路 精讲 优质好文持续更新中 欢迎小伙伴们点赞 收藏 留言 目录 一
  • CAsyncSocket进行UDP通信

    CAsyncSocket进行UDP通信 客户端代码 CString m ServerIP CString m ClientIP int m ClientPort CString m ReceiveData UINT m ServerPort
  • 基于用户的协同过滤算法(及3种计算用户相似度的方法)

    本文参考 推荐系统实践 中基于用户的协同过滤算法内容 基于老师上课讲解 自己实现了其中的代码 了解了整个过程 UserCF算法实现 实现原理 模拟数据 两两用户之间计算 优化后的倒查表方式计算用户相似度 采用惩罚热门物品和倒查表方式计算用户
  • vue+websocket+express+mongodb实战项目(实时聊天)(一)

    vue websocket express mongodb实战项目 实时聊天 一 在原来基础上增加了多个聊天室以及发送图片 vue websocket express mongodb实战项目 实时聊天 二 http blog csdn ne
  • ARM中的程序状态寄存器(CPSR)

    31 30 29 28 27 8 7 6 5 4 3 2 1 0 N Z C V 保留 I F T M4 M3 M2 M1 M0 N Negative Less Than I IRQ disable Z Zero F FIQ disable
  • Caffe在Linux下的安装,编译,实验

    第一部分 Caffe 简介 caffe是有伯克利视觉和学习中心 BVLC 开发 作者是伯克利博士贾杨清 caffe是一个深度学习 deep learning 框架 其具有易读 快速和模块化思想 第二部分 Caffe安装与配置 2 1 配置环
  • 彻底卸载、devtools安装问题、扩展程序的使用

    目录 一 彻底卸载 MySQL Mongo数据库 二 vue devtools 三 扩展程序的使用 一 彻底卸载 MySQL Mongo数据库 停止服务1 cmd命令 net stop mysql mongo 停止服务2 如下图 这个好 控
  • ElasticSearch笔记整理(三):Java API使用与ES中文分词

    TOC pom xml 使用maven工程构建ES Java API的测试项目 其用到的依赖如下
  • Packing data with Python

    Packing data with Python 06 Apr 2016 Defining how a sequence of bytes sits in a memory buffer or on disk can be challeng
  • EasyAR 开发实例---AR礼物(简单demo)

    一个节日礼物效果 显示模型 在本次的案例中 我使用的是unity5 6 3版本 EasyAR 为2 0 用1 0的版本 在渲染那块有问题 导入SDK 到EasyAR官网 http www easyar cn view download ht
  • minitab数据处理软件

    下载地址 http www xue51 com soft 3430 html 1 介绍 Minitab软件是现代质量管理统计的领先者 全球六西格玛实施的共同语言 以无可比拟的强大功能和简易的可视化操作深受广大质量学者和统计专家的青睐 Min
  • Springboot 指定日志打印文件夹

    日志打印作为日常开发是必不可少了 SpringBoot项目中引入spring boot starter 这里面就包含了日志所需要的依赖 下面是两种方法打印日志 都很简单 亲测有效 方法一 直接在application yml中添加配置 指定
  • java 获取两个List集合的交集

    获取两个List集合的交集 可以使用Java中的retainAll方法来获取两个List的交集 假设有两个List类型的集合list1和list2 代码如下 List
  • MySQL主主复制+Keepalived 打造高可用MySQL集群

    转载地址 http www linuxidc com Linux 2014 09 106570 htm 为了响应公司需求 打造出更安全的mysql集群 能够实现mysql故障后切换 研究了几天终于有了成果 一起分享一下 首先介绍一下这套集群
  • 代码和数据结构

    代码 58同城 给出任意一个正整数 怎么用递归把他反过来打印 include
  • C++ 类 & 对象

    C 在 C 的基础上增加了面向对象编程 OOP 支持面向对象程序设计 类是 C 的核心特性 一种用户自定义的类型 用于指定对象的形式 类包含数据和用于处理数据的方法 函数 数据称为成员变量 函数称为成员函数 类可以看作是一种模板 用来创建具
  • 2022-03-09 Unity 3D两个场景的切换

    文章目录 效果 实现步骤 1 创建场景 2 添加按钮 3 写C 脚本实现切换 4 添加Component到Button上 5 添加两个Scene到Build中 测试效果 参考资料 效果 在scene1中点击按钮 进入scene2 实现步骤
  • Android 高德地图 关于INVALID_USER_KEY和INVALID_USER_SCODE的问题

    本文主要讲我在配置高德地图时候碰到的问题和解决方法 希给遇到同样问题的你一些帮助 1 INVALID USER KEY 当时我的Log上显示此问题 并且显示key为空 但我明明在mete data标签中写了我的key值 后发现manifes
  • 基于Spring Boot AOP用户权限系统模块开发

    公司项目需要涉及到用户权限的问题 每个用户都应该有自己的权限 而且权限应该是灵活可变的 系统的登陆模块因为涉及到分布式部署的问题以及前后端分离 不能采用传统的session作为登陆方式 而是采用JWT的方式实现 保证了接口的无状态性 但是这
  • 初步认识Ehcache清空缓存的3种策略

    Ehcache是一种广泛使用的开源Java分布式缓存 主要面向通用缓存 Java EE和轻量级容器 它具有内存和磁盘存储 缓存加载器 缓存扩展 缓存异常处理程序 一个gzip缓存servlet过滤器 支持REST和SOAP api等特点 在