三种缓存淘汰策略

1, FIFO

先进先出,底层是利用双向链表,新来的数据放到链表的尾部,如果链表塞满了就删除头部的。

2, LFU

最近最少使用算法。思路就是如果一个数据在最近一段时间内使用次数最少,那么将来一段时间使用的可能性也很少。

LFU 是基于访问次数的。

实现:两个HASHMAP, 一个是用来存储数据的, key-value. 一个是用来存储次数的, key-time.

当访问一个key 的时候就在 key-time, 也就是的第二个hashmap 对应的time 加1.

删除的时候就寻找最少time 的那个。

3, LRU

least recently used

如果数据最近被访问过,那么将来访问的几率也很高。

实现:新增加的数据放到头部。每当缓存命中,就把数据放到尾部。删除的时候就删除尾部的数据

原文地址:https://www.cnblogs.com/vincentgwzhang/p/10336180.html

时间: 2024-11-10 16:11:46

三种缓存淘汰策略的相关文章

详解三种缓存过期策略LFU,FIFO,LRU(附带实现代码)

在学操作系统的时候,就会接触到缓存调度算法,缓存页面调度算法:先分配一定的页面空间,使用页面的时候首先去查询空间是否有该页面的缓存,如果有的话直接拿出来,如果没有的话先查询,如果页面空间没有满的时候,使用新页面的时候,就释放旧的页面空间,把新页面缓存起来,以便下次使用同样的页面的时候方便调用. 缓存调度流程图 缓存机制就是上面所说的那样,但是实现的过程以及淘汰旧页面的机制不同,所以会有不同缓存调度方法,就常见的就是FIFO,LRU,LFU缓存过期策略. 1.FIFO(First In First

redis 提供 6种数据淘汰策略

淘汰策略的原因 在 redis 中,允许用户设置最大使用内存大小 server.maxmemory,在内存限定的情况下是很有用的.譬如,在一台 8G 机子上部署了 4 个 redis 服务点,每一个服务点分配 1.5G 的内存大小,减少内存紧张的情况,由此获取更为稳健的服务. 6中淘汰策略 redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略.redis 提供 6种数据淘汰策略: volatile-lru:从设置了过期时间的数据集中,选择最近最久未使用的数据释放: allkeys

redis数据结构、持久化、缓存淘汰策略

Redis 单线程高性能,它所有的数据都在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换性能损耗问题.redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放到文件事件分派器,事件分派器将事件分发给事件处理器. 1.Redis数据结构及简单操作指令 String.list.set.hash.zset(有序set) 总体来说redis都是通过Key-Value的形式来存储数据的.只是不用数据类型Value的形式不同. String:最简单数据结构,比如我们

redis缓存淘汰策略

缓存淘汰策略 介绍 当 Redis 内存超出物理内存限制时,内存的数据会开始和磁盘产生频繁的交换 (swap).交换会让 Redis 的性能急剧下降,对于访问量比较频繁的 Redis 来说,这样龟速的存取效率基本上等于不可用. 在生产环境中我们是不允许 Redis 出现交换行为的,为了限制最大使用内存,Redis 提供了配置参数 maxmemory 来限制内存超出期望大小. 当实际内存超出 maxmemory 时,Redis 提供了几种可选策略 (maxmemory-policy) 来让用户自己

cocos2dx[3.2](22)——三种缓存类

[唠叨] Cocos引擎主要有三种缓存类: > 纹理缓存     : TextureCache > 精灵帧缓存 : SpriteFrameCache > 动画缓存     : AnimationCache 缓存的目的就是:先将所需资源(如纹理图片)加载到内存中,之后再次使用该资源的时候,就可以直接从内存中取出,而不需要重新加载.从而减少了CPU和GPU的内存占用. 本文对参考文献的内容进行了整理与整合,并加入一些自己的观点. [致谢] http://www.cocoachina.com/

三种缓存模式

(这是一个MIT同学整理的6.004 Computation Structure的课程的笔记,内容清晰易懂,看一遍可以简单了解计算机组成的基本内容,一共55页,计划全部译成中文.转载请注明出处.) (笔记原文:?https://app.box.com/s/hj73i5cnek38kpy9yw22) ? 存储层次(Memory Hierarchy) CUP和内存数据交换的效率不高,这是指令流水线式处理器的瓶颈之一.我们可以通过存储层次(Memory Hierarchy)的方式来解决这个问题.这个存

两种缓存淘汰算法LFU&LRU

LRU全称是Least Recently Used,即最近最久未使用的意思. LRU算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小.也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰. 实现LRU 1.用一个数组来存储数据,给每一个数据项标记一个访问时间戳,每次插入新数据项的时候,先把数组中存在的数据项的时间戳自增,并将新数据项的时间戳置为0并插入到数组中.每次访问数组中的数据项的时候,将被访问的数据项的时间戳置为0.当数组空间已满时

基于Redis的三种分布式爬虫策略

前言: 爬虫是偏IO型的任务,分布式爬虫的实现难度比分布式计算和分布式存储简单得多. 个人以为分布式爬虫需要考虑的点主要有以下几个: 爬虫任务的统一调度 爬虫任务的统一去重 存储问题 速度问题 足够"健壮"的情况下实现起来越简单/方便越好 最好支持"断点续爬"功能 Python分布式爬虫比较常用的应该是scrapy框架加上Redis内存数据库,中间的调度任务等用scrapy-redis模块实现. 此处简单介绍一下基于Redis的三种分布式策略,其实它们之间还是很相似

NET下三种缓存机制(Winform里面的缓存使用 )

原文(http://www.cnblogs.com/wuhuacong/p/3526335.html)非常感谢伍华聪作者的分享! 缓存在很多情况下需要用到,合理利用缓存可以一方面可以提高程序的响应速度,同时可以减少对特定资源访问的压力.本文主要针对自己在Winform方面的缓存使用做一个引导性的介绍,希望大家能够从中了解一些缓存的使用场景和使用方法.缓存是一个中大型系统所必须考虑的问题.为了避免每次请求都去访问后台的资源(例如数据库),我们一般会考虑将一些更新不是很频繁的,可以重用的数据,通过一