redis数据淘汰机制
概述
在 Redis 中,允许用户设置最大使用内存大小 server.maxmemory,在内存限定的情况下是很有用的。譬如,在一台 8G 机子上部署了 4 个 Redis 服务点,每一个服务点分配 1G 的内存大小,减少内存紧张的情况,由此获取更为稳健的服务。Redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。
Redis 提供 6 种数据淘汰策略
- volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用 的数据淘汰
- volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数 据淘汰
- volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据 淘汰
- allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
- allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
- no-enviction(驱逐):禁止驱逐数据 ,不淘汰数据,直接报错
默认使用:no-enviction
Redis 确定驱逐某个键值对后,会删除这个数据,并将这个数据变更消息发布到本地(AOF 持久化)和从机(主从连接)。
LRU 数据淘汰机制
每一个 Redis 对象都会设置相应的 lru,即最近访问的时间。可以想象的是,每一次访问数据的时候,会更新 redisObject.lru。
淘汰原理:
在数据集中随机挑选几个键值对,取出其中 lru 最大的键值对淘汰。所以,你会发现,Redis 并不是保证取得所有数据集中最近最少使用(LRU)的键值对,而只是随机挑选的几个键值对中的。
TTL 数据淘汰机制
Redis 数据集数据结构中保存了键值对过期时间的表,即 redisDb.expires,在使用 SET 命令的时候,就有一个键值对超时时间的选项。
淘汰原理:
从过期时间 redisDB.expires 表中随机挑选几个键值对,取出其中 ttl 最大的键值对淘汰。同样你会发现,Redis 并不是保证取得所有过期时间的表中最快过期的键值对,而只是随机挑选的几个键值对中的。
什么时候开始淘汰数据
Redis 每服务客户端执行一个命令的时候,会检测使用的内存是否超额。如果超额,即进行数据淘汰。
数据淘汰策略其实只是其中一种数据的删除策略,从大方向上看,应该看看redis数据删除策略
数据删除策略有三种:
- 被动删除:只有key被操作时(如GET),Redis才会被动检查该key是否过期,如果过期则删除之并且返回NIL。
- 主动删除:定期删除过期的数据,可以配置
- 当前已用内存超过maxmemory限定时,触发数据淘汰策略
被动删除特点:
- 这种删除策略对CPU是友好的,删除操作只有在不得不的情况下才会进行,不会其他的expire key上浪费无谓的CPU时间。
- 但是这种策略对内存不友好,一个key已经过期,但是在它被操作之前不会被删除,仍然占据内存空间。如果有大量的过期键存在但是又很少被访问到,那会造成大量的内存空间浪费。expireIfNeeded(redisDb *db, robj *key)函数位于src/db.c。
参考
http://wiki.jikexueyuan.com/project/redis/data-elimination-mechanism.html
相关推荐
redis数据淘汰机制.avi
Java面试题79:redis数据淘汰机制.mp4
- **第11章:redis数据淘汰机制** - **概述**: Redis如何处理内存不足的情况。 - **机制**: LRU、TTL等数据淘汰算法的工作原理。 - **实现**: 数据淘汰的具体实现逻辑。 - **第12章:RDB持久化策略** - **简介*...
"Redis过期策略和内存淘汰机制" Redis是一种基于内存的NoSQL数据库,它具有高效的读写性能和丰富的数据结构。但是,Redis的内存使用量也会不断增加,如果不进行合理的内存管理,将会导致Redis服务器崩溃或性能下降...
Redis 过期-淘汰机制是指将过期的数据或者很久没有访问的数据进行删除的机制。该机制分为主动淘汰和被动淘汰两种。主动淘汰是指用户设定过期时间,例如使用定时过期、惰性过期和定期过期等策略。被动淘汰是指Redis ...
通过数据持久化、内存管理策略、缓存淘汰机制的合理选择和应用优化,我们可以充分利用Redis的强大功能,为我们的业务带来显著的提升。同时,与MyBatis-Plus等框架的结合,让开发工作更加便捷高效。
随着Squirrel的发展,团队面临了Redis在处理Rehash机制时的一些问题,特别是在满容状态和高负载场景下。 Rehash是Redis为了动态调整哈希表大小而执行的操作,当哈希表的负载因子(used/size)达到一定阈值时,Redis...
RDB是在特定时间点生成的快照文件,而AOF记录了所有写操作的日志,提供了一种持久化机制来保证数据安全。 - 接着,Redis会监听配置的端口,等待客户端连接。 - 最后,服务启动成功,可以接受命令并执行。 2. **...
0301 Redis数据持久化 0302 RDB持久化机制 0303 RDB数据恢复案例 0304 AOF持久化机制. 0305 AOF数据恢复案例 0306 Redis线程模型 0307 Redis过期数据淘汰 0308 listpack 0309 碎片整理 0310 SLOWLOG 0311 Latency ...
附有面试讲解视频,不是网盘,下载既有视频,屡试不爽的面试宝典。 Java面试题01.面试的整体流程 Java面试题02.java的垮平台原理 ...Java面试题79:redis数据淘汰机制 Java面试题80:java访问redis级redis集群 ......
随着业务的增长,Redis的内存占用逐渐逼近1GB,此时根据预先配置的数据淘汰策略,Redis将自动开始淘汰数据以避免内存溢出。 - 如果采用的是`volatile-lru`策略,Redis将首先从设置了过期时间的数据集中查找并淘汰...
Redis 的优势在于它的高速读写性能、丰富的数据结构以及持久化机制。 标题中的重复“redisredisredisredis”可能意味着在讨论 Redis 的重要性或强调其在项目中的核心地位。描述部分同样如此,暗示了 Redis 在某场景...
使用Redis缓存时,我们需要注意缓存策略的选择,比如LRU(最近最少使用)或LFU(最不经常使用)算法来决定何时淘汰旧数据。此外,还可能涉及到缓存穿透、缓存雪崩和缓存击穿等问题及其解决方案。 "redis_test"可能...
### redis数据类型 (这里对每个数据类型做了一些我个人能理解到的解释,包括实现的数据结构等) # redis持久化 ### 写了快照和命令行模式的优点缺点 (按道理的话本应该写上快照模式的自动和手动,save和bgsave等等,但是...
**Redis数据结构与缓存策略** 1. **数据结构**: Redis支持多种数据结构,如字符串、列表、集合、有序集合和哈希表,这些结构适应各种应用场景。例如,哈希表适合存储对象,列表可以用于消息队列,有序集合用于排行...
1. Redis数据类型:Redis支持多种数据类型,包括字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)和有序集合(Sorted Sets)。这些数据类型为开发者提供了极大的灵活性,可以在处理各种场景时选择最适合的数据...
在本资料"05-Redis 核心数据结构 & Redis 6 新特性详解-郭嘉.zip"中,我们将深入探讨Redis的核心数据结构以及最新的Redis 6版本的新特性。 一、Redis核心数据结构 1. 字符串(String):Redis最基础的数据类型,可...
1. **Redis简介**:Redis是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它的特点是数据持久化、支持多种数据结构(如字符串、哈希、列表、集合、有序集合)、网络服务、...