LRU
  • 2024-07-06LRU算法简介
    LRU(LeastRecentlyUsed,最近最少使用)算法是一种常用于缓存管理的算法,用于在缓存空间有限的情况下,决定哪些数据应该被移除。它的基本思想是:如果一个数据最近被访问过,那么在将来一段时间内它被再次访问的概率较高。因此,当缓存已满,需要移除数据时,优先移除那些最近最少被使用的数据。
  • 2024-07-06LRU缓存算法设计
    LRU缓存算法的核⼼数据结构就是哈希链表,双向链表和哈希表的结合体。这个数据结构⻓这样:创建的需要有两个方法,一个是get方法,一个是put方法。一些问题:为什么需要使用双向链表呢?因为删除链表的本身,需要得到他的前一个节点。如果使用单链表,效率就会很低,这边是使用的空间换
  • 2024-07-06深入刨析Redis存储技术设计艺术(一)
    一、RedisObject1.1、Redis数据存储1.2、RedisObject的数据结构redis的value都封装在redisObject中redisObject的底层实现:redisObject的数据结构如下:server.htypedefstructredisObject{ unsignedtype:4; unsignedencoding:4; unsignedlru
  • 2024-07-05内存缓存选型
    背景tcp网关出现了内存泄漏的现象,经排查后发现是一个java原生内存缓存导致的。Map<String,String>belongCache=newConcurrentHashMap<>();该内存缓存作为兜底缓存使用,主要逻辑是读取redis用户身份信息后,有则更新到内存缓存,没有则从内存缓存中获取缓存数据。该内存缓存直
  • 2024-07-02LRU
    #include<iostream>#include<unordered_map>#include<list>usingnamespacestd;classLRUCache{private:intcapacity;unordered_map<int,pair<int,list<int>::iterator>>cache;list<int>lruList;
  • 2024-06-24带有ttl的Lru在Rust中的实现及源码解析
    TTL是TimeToLive的缩写,通常意味着元素的生存时间是多长。应用场景数据库:在redis中我们最常见的就是缓存我们的数据元素,但是我们又不想其保留太长的时间,因为数据时间越长污染的可能性就越大,我们又不想在后续的程序中设置删除,所以我们此时需要设置过期时间来让数据自动淘汰。
  • 2024-06-21Lru-k在Rust中的实现及源码解析
    LRU-K是一种缓存淘汰算法,旨在改进传统的LRU(LeastRecentlyUsed,最近最少使用)算法的性能。将其中高频的数据达到K次访问移入到另一个队列进行保护。算法思想LRU-K中的“K”代表最近使用的次数。因此,LRU可以认为是LRU-1的特例。LRU-K的主要目的是为了解决LRU算法“缓存污染”的
  • 2024-06-20(四)Redis 缓存应用、淘汰机制
    1、缓存应用一个系统中不同层面数据访问速度不一样,以计算机为例,CPU、内存和磁盘这三层的访问速度从几十ns到100ns,再到几ms,性能的差异很大,如果每次CPU处理数据时都要到磁盘读取数据,系统运行速度会大大降低。所以,计算机系统中,默认有两种缓存:(1)CPU里面的末级缓存,即LLC,用来
  • 2024-06-18linux内存管理(十)- 页面回收(二)
    本篇了解一下内核是怎样触发页面回收的。触发内存回收的方式有两种,同步和异步回收。alloc_pages在分配内存的时候,如果内存短缺会主动回收内存,这是同步回收;内核有一个或多个kswapd内核线程负责在后台回收内存,这是异步。 看一下shrink_active_liststaticvoidshrink_lruvec(st
  • 2024-06-18Rust性能分析之测试及火焰图,附(lru,lfu,arc)测试
    性能测试,在编写代码后,单元测试及性能测试是重要的验收点,好的性能测试可以让我们提前发现程序中存在的问题。测试用例在Rust中,测试通常有两部分,一部分是文档测试,一部分是模块测试。通常我们在函数定义的开始可以看到以///三斜杠开头的就是文档注释发布的时候会将自动生成到docs.
  • 2024-06-12linux内存管理(九)- 页面回收
    参考《深入理解linux内核架构》和这篇博客Linux中的内存回收[一]-知乎(zhihu.com)内核代码v6.8-rc2内存在计算机系统中经常是稀缺资源,当系统中内存不足甚至耗尽,为了让系统继续运行必须回收一部分内存。为了回收内存,我们必须首先知道系统中的内存都处于什么状态。内存中的页
  • 2024-06-07Lru在Rust中的实现, 源码解析
    LRU(LeastRecentlyUsed)是一种常用的页面置换算法,其核心思想是选择最近最久未使用的页面予以淘汰。LRU算法原理基本思想:LRU算法基于一个假设,即如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很低。因此,当缓存空间不足时,算法会选择最久未使用的数据进行
  • 2024-06-05Redis-3-过期时间淘汰策略与内存淘汰策略
    目录1.Redis过期时间淘汰策略1.1惰性删除1.2定期删除1.3主动扫描2.Redis内存淘汰策略2.1最大内存配置2.2LRU最近最少使用2.2.1传统LRU2.2.2Redis中的LRU2.2.3LRU的缺点2.3访问频率最低2.3.1传统LFU2.3.2Redis的LFU2.3.2.1时间衰减函数2.3.2.2热度值函数2.3.2.3总结2
  • 2024-06-04前端记忆函数和LRU缓存
    在Js中,“记忆化(Memoization)”是一种优化技术,它通过存储昂贵函数的结果,并复用这些结果以避免重复执行,从而可以加快代码执行速度。这种技术在处理递归和迭代问题时尤其有用。下面是一个记忆化函数的一般实现:functionmemoize(fn){letcache={}returnfunction(.
  • 2024-05-29算法:LRU 和 LFU 缓存淘汰算法
    零、资料LRU和LFU缓存淘汰算法(javascript与go语言实现) 一、基本概念LRU(LeastRecentlyUsed)和LFU(LeastFrequentlyUsed)是两种常见的缓存淘汰算法,用于在缓存空间有限的情况下选择合适的缓存对象进行淘汰,以提高缓存的利用效率LRU算法基于"最近最少使用"的原则进行淘汰
  • 2024-05-28【SCAU操作系统】实验二页面置换算法的模拟实现及命中率对比python源代码及实验报告参考
    一、课程设计目的通过请求页式管理方式中页面置换算法的模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理中的页面置换算法。二、课程设计内容模拟实现OPT(最佳置换)、FIFO和LRU算法,并计算缺页率。三、要求及提示1、首先用随机数生成函数
  • 2024-05-22python0005
    所谓LRU算法,是指在发生缺页并且没有空闲主存块时,把最近最少使用的页面换出主存块,腾出地方来调入新页面。问题描述:一进程获得n个主存块的使用权,对于给定的进程访问页面次序,问当采用LRU算法时,输出发生的缺页次数。defLRU(pages,maxNum,n):temp=[]times=0f
  • 2024-04-26Redis淘汰策略
    Redis过期策略有几种?Redis中提供八种过期策略,默认是noeviction,即不删除任何数据,当内存不足时会直接报错。可以在Redis的配置文件中进行设置。noeviction:不淘汰任何key,但是内存满时不允许写入新数据,默认就是这种策略。volatile-ttl:对设置了TTL的key,比较key的剩余TTL值,TTL越
  • 2024-04-1620. 缓冲池
    缓冲池介绍每次读写数据都是通过BufferPool;当BufferPool中没有用户所需要的数据时,才去硬盘中获取;通过innodb_buffer_pool_size进行设置总容量;该值设置的越大越好;innodb_buffer_pool_instances设置为多少个缓冲池;总容量还是innodb_buffer_pool_size设置多个insta
  • 2024-04-10利用LinkedHashMap实现简单的LRU
    利用LinkedHashMap进行重写,实现LRU作为缓存字典1、代码实现importjava.util.LinkedHashMap;importjava.util.Map;/***利用LinkedHashMap进行重写,实现LRU作为缓存字典**@param<K>key*@param<V>value*@date2024-04-1009:42**/publicclassLRUCach
  • 2024-04-05LRU缓存(超详细注释)
    /***表示双向链表中的节点。*/classNode{constructor(key=0,value=0){this.key=key;//缓存条目的唯一标识符。this.value=value;//与键关联的值。this.prev=null;//引用列表中的上一个节点。this.next
  • 2024-04-03LeetCode-146. LRU 缓存【设计 哈希表 链表 双向链表】
    LeetCode-146.LRU缓存【设计哈希表链表双向链表】题目描述:解题思路一:双向链表,函数get和put必须以O(1)的平均时间复杂度运行。一张图:解题思路二:0解题思路三:0题目描述:请你设计并实现一个满足LRU(最近最少使用)缓存约束的数据结构。实现LRUCache类:LR
  • 2024-04-02Go的数据结构与实现【LRU Cache】
    介绍在本文中,我们将用Go实现LRUCache。LRUCache最近最少使用(LRU)是一种缓存逐出算法,它按使用顺序组织元素。在LRU中,最长时间没有被使用的元素会被从缓存中逐出。例如,如果我们有一个容量为三个项目的缓存:最初,缓存是空的,我们将元素8放入缓存中,元素9和6像以前一样被缓存
  • 2024-03-31InnoDB 内存结构
    参考资料https://dev.mysql.com/doc/refman/5.7/en/innodb-buffer-pool.htmlhttps://relph1119.github.io/mysql-learning-notes/#/mysql/InnoDB内存结构内存结构如下图查看InnoDB运行状态SHOWENGINEINNODBSTATUS通过上述命令查看InnoDB运行时的状态信息BufferPool
  • 2024-03-30CMU15445 2022fall project1
    cmu154452022falllab1BufferPool此project实现一个bufferpool,缓存住磁盘查询的数据。Task1这部分需要我们实现一个可扩展的哈希表,这部分的难点在于插入操作时的分裂,由于Remove不需要我们将目录和桶收缩回去,所以它也很简单。先分析清楚目录和桶的结构。我们可以先实现简