# 学习如何实现Redis LRU淘汰策略
## 概述
对于刚入行的开发者来说,实现Redis的LRU淘汰策略可能有些困难。但是作为经验丰富的开发者,我将指导你完成这个任务。首先,让我们来了解一下整个过程的流程。
## 流程
```mermaid
pie
title 实现Redis LRU淘汰策略流程
"学习Redis源码" : 20
"理解LRU淘汰策略原理" : 20
"实现LRU淘汰            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-07-01 06:50:13
                            
                                27阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、概述 学过redis的同学就知道,redis是将数据存储在内存中来提高响应速度,避免了从后台数据库中读取数据。但是,内存容量毕竟是有限的,当容量达到上限后,就需要删除部分数据挪出空间,这样数据才可以添加进来。二、Redis的内存淘汰策略redis4.0之前一共实现了6种内存淘汰策略,但是在4.0之后,又增加了2种策略。截止目前,Redis定义了「8种内存淘汰策略」用来处理 redis 内存满的            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-09 21:51:55
                            
                                107阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            一、Redis内存淘汰的必要性我们都知道redis的性能很高,最主要的原因之一就是redis的数据都在内存中放着,我们在从redis中获取数据或者更新redis中的数据时,都是操作的内存中的数据。而当内存被占满了之后怎么办呢?这时就有必要将一些数据清理掉,以便新的数据能够放到redis中。而清理掉哪些数据?保留哪些数据?什么时候清理?如何配置这些策略?这些就是接下来要研究的内容。二、Redis的k            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-05 22:10:41
                            
                                245阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            介绍Redis是一个内存数据库,当Redis使用的内存超过物理内存的限制后,内存数据会和磁盘产生频繁的交换,交换会导致Redis性能急            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-08-04 20:18:40
                            
                                135阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            源码版本 Redis 6.0.0 内存淘汰是什么?什么时候内存淘汰 我们知道,当某个key被设置了过期时间之后,客户端每次对该key的访问(读写)都会事先检测该key是否过期,如果过期就直接删除;但有一些键只访问一次,因此需要主动删除,默认情况下redis每秒检测10次,检测的对象是所有设置了过期时 ...            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2021-07-12 13:04:00
                            
                                214阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
             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的内存淘汰策略LRU
## 概述
在Redis中,内存淘汰策略是指当内存不足时,决定哪些键要被淘汰以释放内存空间的机制。LRU(Least Recently Used,最近最少使用)是Redis内置的一种内存淘汰策略,它会淘汰最长时间没有被访问的键。
## 实现步骤
| 步骤 | 操作 |
| ------ | ------ |
| 1 | 配置Redis.conf文件            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-07-06 04:22:16
                            
                                52阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            面试都背过道八股题:Redis 的内存淘汰策略 LRU 和 LFU 是什么?怎么选好?很多同学对这两个算法的理解,只停留在都是缓存淘汰,但说不清它们具体区别,概念混淆,更不知道实际场景该怎么选?而且 Redis 的 key 淘汰算法其实还不是正统的 LRU 和 LFU 算法,而是基于 LRU/LFU 的一个变种。所以我            
                
         
            
            
            
            文章目录引言对redis内存淘汰策略的看法最大容量究竟是多少?源码解析部分freeMemoryIfNeededevictionPoolPopulatedictGetRandomKeys引言内存淘汰策略            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-07-08 09:43:19
                            
                                93阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            Redis作为缓存使用时,一些场景下要考虑内存的空间消耗问题。Redis会删除过期键以释放空间,过期键的删除策略有两种:
惰性删除:每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键。
定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。
另外,Redis也可以开启LRU功能来自动淘汰一些键值对。
LRU算法当需要从缓存中淘            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2021-06-22 15:05:55
                            
                                449阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Redis提供了5种数据淘汰策略:   volatile-lru:使用LRU算法进行数据淘汰(淘汰上次使用时间最早的,且使用次数最少的key),只淘汰设定了有效期的key allkeys-lru:使用LRU算法进行数据淘汰,所有的key都可以被淘汰 volatile-random:随机淘汰数据,只淘汰设定了有效期的key allkeys-            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-27 01:39:11
                            
                                67阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            # 实现 Redis LRU 淘汰算法
## 简介
在使用 Redis 缓存数据时,为了节省内存空间,常常需要使用 LRU(Least Recently Used)算法来淘汰最近最少使用的数据。本文将介绍如何实现 Redis LRU 淘汰算法。
## 流程概览
下面是实现 Redis LRU 淘汰算法的整体流程:
```mermaid
journey
    title 实现 Redis            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-08-22 07:31:34
                            
                                63阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            1、为什么需要内存淘汰策略2、Redis中的max-memory3、淘汰内存的过程4、Redis中的内存淘汰策略5、Redis中实现的LRU算法为近似算法6、Redis中的LFU算法 7、内存淘汰策略的选择(个人观点)1、为什么需要内存淘汰策略我们都知道Redis是一个基于k-v数据库,随着里面键值对的增加,redis内存的使用量也会上升,因此,我们需要对Redis的最大内存使用量进行限            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-30 21:53:00
                            
                                64阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            1 问题描述之前运行的服务突然报错:OOM command not allowed when used memory > 'maxmemory'解决办法:1、增大redis内存maxmemory 1024M2、修改最大内存策略由maxmemory-policy noeviction更改为maxmemory-policy allkeys-lru2 redis内存策略2.1 过期策略Redis提            
                
         
            
            
            
            
1 设置带过期时间的 key
# 时间复杂度:O(1),最常用的方式
expire key seconds
# 字符串独有的方式
setex(String key, int seconds, String value)
除了string独有设置过期时间方法,其他类型都需要依靠expire方法来设置时间。如果没有设置时间,那缓存就是永不过期。如果设置了过期时间,之后又想让缓存永不过期,使用pe            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-06-24 15:04:27
                            
                                396阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            # Redis内存淘汰策略实现指南
作为一名经验丰富的开发者,我将引导你了解如何在Redis中实现内存淘汰策略的源码。Redis是一个高性能的键值存储系统,它提供了多种内存淘汰策略来管理内存使用。以下是实现这一功能的步骤和代码示例。
## 步骤概览
以下是实现Redis内存淘汰策略的步骤,以及每一步的简要说明:
| 步骤 | 描述 |
| ---- | ---- |
| 1 | 配置Red            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-07-17 04:13:41
                            
                                28阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            # 科普文章:Redis LRU 淘汰池
在Redis中,LRU(Least Recently Used)淘汰策略是一种常见的数据淘汰方式,用于在内存不足时删除最近最少被访问的数据。Redis通过维护一个LRU淘汰池来实现该策略,当内存不足时,Redis会从该淘汰池中选择最久未被访问的数据进行清理。
## LRU淘汰池的工作原理
LRU淘汰池通常由一个双向链表和一个哈希表组成。双向链表用于按            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-06-20 03:34:39
                            
                                41阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            文章摘要:redis 作为一个高性能key-value 数据库,当内存不足是必然需要执行数据淘汰策略,本文只分析主动淘汰策略,讨论的版本是redis3.0 配置参数和相关数据结构:maxmemory_policy 设置淘汰策略取值如下:1、volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰2、volatile-ttl            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-29 11:41:16
                            
                                103阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            Redis 数据淘汰策略概述Redis是基于内存存储,常用于数据的缓存,所以Redis提供了对键的过期时间的设置,实现了几种淘汰机制便于适应各种场景。设置过期时间我们可以在设置键时设置expire time,也可以在运行时给存在的键设置剩余的生存时间,不设置则默认为-1,设置为-1时表示永久存储。Redis清除过期Key的方式定期删除+惰性删除定期删除Redis设定每隔100ms随机抽取设置了过期            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-30 09:57:16
                            
                                139阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            当redis缓存的数据量越来越大,有限的缓存空间不可避免地会被写满,这个时候就涉及到缓存数据的淘汰策略一、8种淘汰策略 默认情况下,Redis 在使用的内存空间超过 maxmemory 值时,并不会淘汰数据,也就是设定的 noeviction 策略。对应到 Redis 缓存,也就是指,一旦缓存被写满了,再有写请求来时,Redis 不再提供服务,而是直接返回错误volatile-rando            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-11 17:12:45
                            
                                85阅读
                            
                                                                             
                 
                
                                
                    