`

Redis 内存淘汰机制

 
阅读更多
Redis内存淘汰指的是用户存储的一些键被可以被Redis主动地从实例中删除,从而产生读miss的情况,那么Redis为什么要有这种功能?这就是我们需要探究的设计初衷。Redis最常见的两种应用场景为缓存和持久存储,首先要明确的一个问题是内存淘汰策略更适合于那种场景?是持久存储还是缓存?

内存的淘汰机制的初衷是为了更好地使用内存,用一定的缓存miss来换取内存的使用效率。



作为Redis用户,我如何使用Redis提供的这个特性呢?看看下面配置



# maxmemory <bytes>



我们可以通过配置redis.conf中的maxmemory这个值来开启内存淘汰功能,至于这个值有什么意义,我们可以通过了解内存淘汰的过程来理解它的意义:



1.      客户端发起了需要申请更多内存的命令(如set)。



2.      Redis检查内存使用情况,如果已使用的内存大于maxmemory则开始根据用户配置的不同淘汰策略来淘汰内存(key),从而换取一定的内存。



3.      如果上面都没问题,则这个命令执行成功。



maxmemory为0的时候表示我们对Redis的内存使用没有限制。



Redis提供了下面几种淘汰策略供用户选择,其中默认的策略为noeviction策略:



·         noeviction:当内存使用达到阈值的时候,所有引起申请内存的命令会报错。



·         allkeys-lru:在主键空间中,优先移除最近未使用的key。



·         volatile-lru:在设置了过期时间的键空间中,优先移除最近未使用的key。



·         allkeys-random:在主键空间中,随机移除某个key。



·         volatile-random:在设置了过期时间的键空间中,随机移除某个key。



·         volatile-ttl:在设置了过期时间的键空间中,具有更早过期时间的key优先移除。



这里补充一下主键空间和设置了过期时间的键空间,举个例子,假设我们有一批键存储在Redis中,则有那么一个哈希表用于存储这批键及其值,如果这批键中有一部分设置了过期时间,那么这批键还会被存储到另外一个哈希表中,这个哈希表中的值对应的是键被设置的过期时间。设置了过期时间的键空间为主键空间的子集。



我们了解了Redis大概提供了这么几种淘汰策略,那么如何选择呢?淘汰策略的选择可以通过下面的配置指定:



# maxmemory-policy noeviction



但是这个值填什么呢?为解决这个问题,我们需要了解我们的应用请求对于Redis中存储的数据集的访问方式以及我们的诉求是什么。同时Redis也支持Runtime修改淘汰策略,这使得我们不需要重启Redis实例而实时的调整内存淘汰策略。



下面看看几种策略的适用场景:



·         allkeys-lru:如果我们的应用对缓存的访问符合幂律分布(也就是存在相对热点数据),或者我们不太清楚我们应用的缓存访问分布状况,我们可以选择allkeys-lru策略。



·         allkeys-random:如果我们的应用对于缓存key的访问概率相等,则可以使用这个策略。



·         volatile-ttl:这种策略使得我们可以向Redis提示哪些key更适合被eviction。



另外,volatile-lru策略和volatile-random策略适合我们将一个Redis实例既应用于缓存和又应用于持久化存储的时候,然而我们也可以通过使用两个Redis实例来达到相同的效果,值得一提的是将key设置过期时间实际上会消耗更多的内存,因此我们建议使用allkeys-lru策略从而更有效率的使用内存。
分享到:
评论

相关推荐

    redis过期策略和内存淘汰机制.pdf

    介绍的redis过期策略和内存淘汰机制

    Redis过期-淘汰机制的解析和内存占用过高的解决方案.docx

    Redis过期-淘汰机制的解析和内存占用过高的解决方案.docx

    Redis面试题.pdf

    包含缓存穿透、雪崩、击穿发生原因和解决方案;先更新数据库还是redis(图解);是单线程还是多线程;乐观锁/悲观锁;持久化AOF/RDB + 优缺点;怎么保证原子性的;过期策略介绍+内存淘汰机制 等主流问题。

    Redis知识梳理.xmind

    从Redis的基础、分布式锁、缓存雪崩、缓存击穿、缓存穿透、持久化、高可用、内存淘汰机制等方面去罗列主要知识点,以思维导图的方式进行呈现,可以让读者更条理清晰的在最短的时间内掌握Redis的主要知识

    Redis查漏补缺_最易错过的技术要点大扫盲

    Redis查漏补缺; 最易错过的技术要点大扫盲 本文围绕以下几点进行阐述: ...•Redis的过期策略以及内存淘汰机制 •Redis和数据库双写一致性问题 •如何应对缓存穿透和缓存雪崩问题 •如何解决Redis的并发竞争问题

    redis面试题热门20道以及解析

    问题触及了Redis的性能优势、单线程模型、主从复制、集群架构、内存淘汰策略、分布式锁实现、发布/订阅模式等,旨在评估候选人对Redis实际应用和潜在问题的理解和解决能力。掌握这些知识点对于构建高效、可靠的数据...

    redis开发的概要介绍与分析

    在Redis开发过程中,开发者可以充分利用Redis的内置功能,如复制、Lua脚本、LRU淘汰机制、事务和不同级别的磁盘持久化等。此外,Redis Sentinel和Redis Cluster等高级功能提供了高可用性和可扩展性,使得Redis能够...

    redis.xmind

    redis的数据类型、锁的机制、淘汰策略、缓存过期策略、持久化、内存分配、降低内存占用、集群等知识体系。 redis的数据类型、锁的机制、淘汰策略、缓存过期策略、持久化、内存分配、降低内存占用、集群等知识体系。

    redis常见面试题汇总

    redis的过期策略以及内存淘汰机制 回答: redis采用定期清除和惰性删除的策略 redis 并不是每隔100ms 扫描全部的key 而是根据随机抽取一定得key 进行检查key 是否过期, redis 也会在你获取某个key的时候进行检查

    Redis.xmind

    Redis学习思维导图,主要包括基本数据结构、过期策略与内存淘汰策略、单线程机制

    面试还搞不懂redis,快看看这40道面试题(含答案和思维导图)

    Redis 面试题 1、什么是 Redis?. 2、Redis 的数据类型? 3、使用 Redis 有哪些好处?...11、Redis 的回收策略(淘汰策略)? 12、为什么 edis 需要把所有数据放到内存中? 13、Redis 的同步机制了解么? 14、Pipeline 有

    mcache:一个高性能本地内存缓存,带有各种内存淘汰算法

    因缓存的使用相关需求,牺牲一部分服务器内存,因减少了网络数据交互,直接使用本机内存,可换取比redis,memcache等更快的缓存速度, 可做为更高一层的缓存需要 what? 用mcache能做什么? 可作为超高频率数据使用的缓存...

    Redis_Deep_Read:redis 1.0原始注解

    在这些基本数据结构上也提供了针对该数据结构的各种操作,这也是Redis之所以流行起来的一个重要原因,当然Redis能够流行起来的原因,远远不只这一个,如支持高并发的读写,数据的持久化,高效的内存管理及消除机制.....

    java8源码-FiveYears:学习/总结/成长/记录

    内存淘汰机制 - 未学习 分片机制 - 未学习 哨兵机制 - 未学习 集群 - 未学习 缓存雪崩 - 未学习 缓存穿透 - 未学习 布隆过滤器 - 未学习 :airplane:框架 Spring IOC - 未学习 Spring AOP - 未学习 Spring Bean - 未...

    interview-go:golang面试题集合

    Redis中内存淘汰算法实现 Redis主从复制原理 MySQL相关 MySQL数据库经典面试题解析 MySQL InnoDB MVCC 机制的原理及实现 为什么MySQL使用B+树做索引? 面试必备算法 字符串之实现 Sunday 匹配 字符串泄漏之反转字符...

    大厂面试专栏,冲击大厂必备

    单线程、数据类型、淘汰机制、集群模式 第八篇:MySQL 那点破事!索引、SQL调优、事务、B+树、分库分表 第九篇:Mybatis 那点破事! ORM,动态SQL、动态代理 第十篇:Spring 那点破事!IOC、AOP、生命周期、动态代理...

    Seckill:ByteCamp 2019高并发高可用秒杀系统设计与实现工程赛道三等奖(字节跳动夏令营营营在6000+中排名前150位,在16位中排名前3位,秒杀赛场排名前1位)

    5台2核CPU 8 G内存机器 所有接口以1s超时作为压测加权 6000万商品数据 500万正常用户 恶意流量直接返回403 接口 功能描述 /产品 通过商品ID查询商品信息 /命令 下单接口返回订单号 /支付 支付订单 /结果 查询全部...

Global site tag (gtag.js) - Google Analytics