# 实现 Redis LRU 淘汰算法
## 简介
在使用 Redis 缓存数据时,为了节省内存空间,常常需要使用 LRU(Least Recently Used)算法来淘汰最近最少使用的数据。本文将介绍如何实现 Redis LRU 淘汰算法。
## 流程概览
下面是实现 Redis LRU 淘汰算法的整体流程:
```mermaid
journey
    title 实现 Redis            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-08-22 07:31:34
                            
                                63阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、概述 学过redis的同学就知道,redis是将数据存储在内存中来提高响应速度,避免了从后台数据库中读取数据。但是,内存容量毕竟是有限的,当容量达到上限后,就需要删除部分数据挪出空间,这样数据才可以添加进来。二、Redis的内存淘汰策略redis4.0之前一共实现了6种内存淘汰策略,但是在4.0之后,又增加了2种策略。截止目前,Redis定义了「8种内存淘汰策略」用来处理 redis 内存满的            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-09 21:51:55
                            
                                107阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            # 科普文章:Redis LRU 淘汰池
在Redis中,LRU(Least Recently Used)淘汰策略是一种常见的数据淘汰方式,用于在内存不足时删除最近最少被访问的数据。Redis通过维护一个LRU淘汰池来实现该策略,当内存不足时,Redis会从该淘汰池中选择最久未被访问的数据进行清理。
## LRU淘汰池的工作原理
LRU淘汰池通常由一个双向链表和一个哈希表组成。双向链表用于按            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-06-20 03:34:39
                            
                                41阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、Redis内存淘汰的必要性我们都知道redis的性能很高,最主要的原因之一就是redis的数据都在内存中放着,我们在从redis中获取数据或者更新redis中的数据时,都是操作的内存中的数据。而当内存被占满了之后怎么办呢?这时就有必要将一些数据清理掉,以便新的数据能够放到redis中。而清理掉哪些数据?保留哪些数据?什么时候清理?如何配置这些策略?这些就是接下来要研究的内容。二、Redis的k            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-05 22:10:41
                            
                                245阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            官:我看你简历提到xxx项目使用了redis小弱鸡:嗯,因为xxxx的性能问题,经过排查之后,发现性能瓶颈在数据库上面,所以引入了redis面试官:行,那你了解redis的过期策略吗?小弱鸡:有了解过,因为redis是基于内存来进行高性能、高并发的读写操作的,既然是内存,那肯定有空间的限制,如果只有10g内存,一直往里面写数据,那肯定不行,所以采用一些过期策略把不需要的数据删除、或者是淘汰掉。面试            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2019-07-15 18:06:00
                            
                                107阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            # 学习如何实现Redis LRU淘汰策略
## 概述
对于刚入行的开发者来说,实现Redis的LRU淘汰策略可能有些困难。但是作为经验丰富的开发者,我将指导你完成这个任务。首先,让我们来了解一下整个过程的流程。
## 流程
```mermaid
pie
title 实现Redis LRU淘汰策略流程
"学习Redis源码" : 20
"理解LRU淘汰策略原理" : 20
"实现LRU淘汰            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-07-01 06:50:13
                            
                                27阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            面试都背过道八股题:Redis 的内存淘汰策略 LRU 和 LFU 是什么?怎么选好?很多同学对这两个算法的理解,只停留在都是缓存淘汰,但说不清它们具体区别,概念混淆,更不知道实际场景该怎么选?而且 Redis 的 key 淘汰算法其实还不是正统的 LRU 和 LFU 算法,而是基于 LRU/LFU 的一个变种。所以我            
                
         
            
            
            
            # 如何实现Redis的内存淘汰策略LRU
## 概述
在Redis中,内存淘汰策略是指当内存不足时,决定哪些键要被淘汰以释放内存空间的机制。LRU(Least Recently Used,最近最少使用)是Redis内置的一种内存淘汰策略,它会淘汰最长时间没有被访问的键。
## 实现步骤
| 步骤 | 操作 |
| ------ | ------ |
| 1 | 配置Redis.conf文件            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-07-06 04:22:16
                            
                                52阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            LRU是最近最少使用页面置换算法(Least Recently Used),也就是首先淘汰最长时间未被使用的页面* LRU_Cache.php<?php/** * Created by PhpStorm. * User: mingzhanghui * Date: 1/10/2020 * Time: 14:40 */class LRU_Cache{    /**...            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-08-13 01:02:23
                            
                                313阅读
                            
                                                                             
                 
                
                             
         
            
            
            
             Redis LRU cache可以通过参数maxmemory,在配置文件redis.conf中设置,或者在redis服务启动之后使用CONFIG SET命令设置。例如在redis.conf中设置cache大小为100mb:  maxmemory 100mb  maxmemory设置为0,表示cache大小无限制(注意:32位操作系统最大支持3GB的内存,32位操作系统中maxmemory最大为3            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-26 08:49:26
                            
                                63阅读
                            
                                                                             
                 
                
                             
         
            
            
            
                   当 Redis 内存超出物理内存限制时,内存的数据会开始和磁盘产生频繁的交换 (swap)。交换会让 Redis 的性能急剧下降,对于访问量比较频繁的 Redis 来说,这样龟速的存取效率基本上等于不可用。         在生产环境中我们是不允许 Redis 出现交换行为的,为了限制最大使用内            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-11 15:43:40
                            
                                71阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Redis提供了5种数据淘汰策略:   volatile-lru:使用LRU算法进行数据淘汰(淘汰上次使用时间最早的,且使用次数最少的key),只淘汰设定了有效期的key allkeys-lru:使用LRU算法进行数据淘汰,所有的key都可以被淘汰 volatile-random:随机淘汰数据,只淘汰设定了有效期的key allkeys-            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-27 01:39:11
                            
                                67阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            1 标准LRU的实现原理LRU,最近最少使用(Least Recently Used,LRU),经典缓存算法。LRU会使用一个链表维护缓存中每个数据的访问情况,并根据数据的实时访问,调整数据在链表中的位置,然后通过数据在链表中的位置            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-01-10 14:07:08
                            
                                205阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Redis作为缓存使用时,一些场景下要考虑内存的空间消耗问题。Redis会删除过期键以释放空间,过期键的删除策略有两种:
惰性删除:每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键。
定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。
另外,Redis也可以开启LRU功能来自动淘汰一些键值对。
LRU算法当需要从缓存中淘            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2021-06-22 15:05:55
                            
                                449阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            1 标准LRU的实现原理LRU,最近最少使用(L            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-01-05 14:43:07
                            
                                556阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            LRU含义LRU全称是Least Recently Used,即最近最久未使用的意思。LRU算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰。LRU的实现思路使用数组存储数据,给每个数据项增加一个长整型标识(初始值可设置为时间戳),每次插入数据时先给已有的数据项的时间戳自增,然            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-02-12 11:33:51
                            
                                321阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            class LRUCache { //哈希表+双向链表 LinkedHashMap (最近最少使用) 缓存机制 private Map<Integer,Node> map; //存储key value value为Node节点 private int capacity; //最大容量 private ...            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2021-07-16 08:26:00
                            
                                161阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            class LRUCache { //哈希表+双向链表 LinkedHashMap (最近最少使用) 缓存机制 private Map<Integer,Node> map; //存储key value value为Node节点 private int capacity; //最大容量 private ...            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2021-07-16 07:26:00
                            
                                112阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            class LRUNode{ String key; Object value; LRUNode next; public LRUNode(String key, Object value) { this.key = key; this.value = value; } } public class ...            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2021-10-19 15:10:00
                            
                                88阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            什么是LRU算法? LRU是Least Recently Used的缩写,即最近最少使用,在有限的内容块中存储最近使用次数最多的数据,当内容块已满时,把最少使用的数据删除以便存储新的内容。            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2019-01-10 14:55:00
                            
                                76阅读
                            
                                                                                    
                                2评论