`

Redis 内存淘汰机制(转)

 
阅读更多

转自:http://www.cnblogs.com/changbosha/p/5849982.html

 

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是一种基于内存的NoSQL数据库,它具有高效的读写性能...Redis的过期策略和内存淘汰机制是Redis内存管理的核心机制,通过合理的配置和选择,可以达到高效的性能和合理的内存管理。

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

    Redis 过期-淘汰机制的解析和内存占用过高的解决方案 Redis 过期-淘汰机制是指将过期的数据或者很久没有访问的数据进行删除的机制。该机制分为主动淘汰和被动淘汰两种。主动淘汰是指用户设定过期时间,例如使用定时...

    redis内存存储结构分析

    5. **精细配置**:合理设置Redis的最大内存限制,并结合内存淘汰策略进行管理。 通过对Redis内存存储结构的深入理解以及采取适当的优化措施,可以在保持高性能的同时有效管理内存资源,提高系统的整体效率。

    Redis的缓存机制(11)

    通过数据持久化、内存管理策略、缓存淘汰机制的合理选择和应用优化,我们可以充分利用Redis的强大功能,为我们的业务带来显著的提升。同时,与MyBatis-Plus等框架的结合,让开发工作更加便捷高效。

    面试官:Redis 过期删除策略和内存淘汰策略有什么区别?.doc

    然而,过期删除策略并不是唯一的删除机制,Redis 还有一个内存淘汰策略。当 Redis 的内存使用率超过一定的阈值时,会触发内存淘汰策略,以删除一些键值对来释放内存。内存淘汰策略的触发条件和过期删除策略的触发...

    京东针对Redis Rehash机制的探索和实践.docx

    1. **精细化监控**:增强对Redis内存使用情况、Rehash过程和网络状况的监控,以便尽早发现并解决问题。 2. **优化Rehash策略**:调整Rehash的触发条件和执行步骤,使得在高负载期间更加谨慎地进行Rehash,降低对服务...

    redisredis redis redis redis

    8. **内存管理**:Redis 默认在内存中存储所有数据,但可以通过 LRU(Least Recently Used)或 LFU(Least Frequently Used)策略进行淘汰,以控制内存使用。 9. **连接池**:客户端应用通常会使用连接池来管理与 ...

    高性能内存数据库Redis(基础篇)

    通过合理的数据淘汰策略(如LRU、LFU),可以确保在内存不足时,优先移除最近最少使用的数据。 - 使用连接池管理Redis连接,减少建立和关闭连接的开销,提高系统效率。 - 缓存预热:在系统启动时或更新后,预先...

    redis7的离线安装包

    可以通过设置最大内存、淘汰策略等来避免内存溢出。 12. **安全措施**:Redis默认不开启密码认证,为提高安全性,建议设置`requirepass`配置项,启用密码验证。同时,注意防火墙设置,限制只允许特定IP地址连接...

    Redis稳定版 Redis-x64-5.0.14.1.zip

    通过使用LRU(Least Recently Used)策略进行淘汰,保证在内存不足时能有效利用内存。 8. **并发控制**: Redis使用单线程模型处理客户端的请求,通过I/O多路复用技术如epoll或kqueue,实现高效的并发处理。 9. **...

    redis缓存分享,包含redis和redis测试的项目test

    在"redis缓存知识分享.pptx"中,可能详细介绍了如何利用Redis的缓存机制提升系统的响应速度和性能。通常,Redis缓存用于减轻数据库的压力,通过将频繁访问的数据暂存到内存中,从而减少磁盘I/O操作。使用Redis缓存时...

    redis的缓存失效策略和主键失效机制【java面试常问】.docx

    随着业务的增长,Redis的内存占用逐渐逼近1GB,此时根据预先配置的数据淘汰策略,Redis将自动开始淘汰数据以避免内存溢出。 - 如果采用的是`volatile-lru`策略,Redis将首先从设置了过期时间的数据集中查找并淘汰...

    redis-7.0.15-win-amd64

    8. `maxmemory`: 设置Redis的最大内存限制,超过该限制时会根据配置的内存淘汰策略删除键。 安装Redis Windows版本时,需要将"bin"目录添加到系统环境变量Path中,以便在命令行中可以直接运行Redis命令。然后可以...

    Redis数据库32位

    Redis数据库32位版本是针对特定...在考虑使用32位Redis时,需要权衡内存效率和可能的数据处理能力,以及是否能够接受潜在的数据淘汰问题。在大多数现代应用中,64位版本的Redis通常能提供更好的性能和更灵活的扩展性。

    redis-5.0.5.zip windows版本

    - `maxmemory`:限制Redis的内存使用量,达到上限时启用淘汰策略。 4. **客户端工具** - Redis自带的`redis-cli.exe`是命令行工具,用于测试和管理Redis实例。 - 在Windows上,还可以使用图形界面工具如Redis ...

    内存数据库研究报告(33页).zip

    然而,由于内存容量有限,内存数据库通常需要结合数据压缩、数据淘汰策略和持久化机制来平衡性能与存储成本。 Redis作为内存数据库的代表,其数据模型非常灵活,支持多种数据结构如字符串、哈希、列表、集合和有序...

    最新版linux redis-5.0.13.tar.gz

    9. LRU和LFU策略:Redis 5.0.13支持基于最近最少使用(LRU)和最不常用(LFU)的内存淘汰策略,以控制内存使用。 10. 客户端缓存:Redis 5.0.13改进了客户端缓存机制,可以减轻服务器压力,提升性能。 11. 优化与修复...

    redis-7.0.1 windows x64

    6. **内存管理**:Redis 默认将所有数据存储在内存中,但可以通过 LRU(Least Recently Used)或 LFU(Least Frequently Used)策略进行内存淘汰,以应对内存不足的情况。 **关于 `redis-7.0.1 windows x64` 版本**...

    redis container 问题梳理

    合理设置最大内存限制(maxmemory)并配合淘汰策略(如LRU、LFU)是优化内存的关键。 2. **命令执行效率**:某些命令如`KEYS`和`SCAN`在大数据量下可能导致服务器阻塞。应尽量避免使用这些命令,转而使用更安全的...

Global site tag (gtag.js) - Google Analytics