`
youyu4
  • 浏览: 435606 次
社区版块
存档分类
最新评论

redis数据淘汰机制

 
阅读更多

redis数据淘汰机制

 

 

概述

在 Redis 中,允许用户设置最大使用内存大小 server.maxmemory,在内存限定的情况下是很有用的。譬如,在一台 8G 机子上部署了 4 个 Redis 服务点,每一个服务点分配 1G 的内存大小,减少内存紧张的情况,由此获取更为稳健的服务。Redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。

 

 

 

 

Redis 提供 6 种数据淘汰策略

 

  1. volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用 的数据淘汰
  2. volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数 据淘汰
  3. volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据 淘汰
  4. allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
  5. allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
  6. 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数据删除策略

 

 

 

数据删除策略有三种:

 

  1. 被动删除:只有key被操作时(如GET),Redis才会被动检查该key是否过期,如果过期则删除之并且返回NIL。
  2. 主动删除:定期删除过期的数据,可以配置
  3. 当前已用内存超过maxmemory限定时,触发数据淘汰策略

被动删除特点:

 

  1. 这种删除策略对CPU是友好的,删除操作只有在不得不的情况下才会进行,不会其他的expire key上浪费无谓的CPU时间。
  2. 但是这种策略对内存不友好,一个key已经过期,但是在它被操作之前不会被删除,仍然占据内存空间。如果有大量的过期键存在但是又很少被访问到,那会造成大量的内存空间浪费。expireIfNeeded(redisDb *db, robj *key)函数位于src/db.c。

 

 

   

参考 

http://wiki.jikexueyuan.com/project/redis/data-elimination-mechanism.html

http://www.tuicool.com/articles/vQNZJb3

分享到:
评论

相关推荐

    79.redis数据淘汰机制.avi

    redis数据淘汰机制.avi

    Java面试题79:redis数据淘汰机制.mp4

    Java面试题79:redis数据淘汰机制.mp4

    redis源码日志

    - **第11章:redis数据淘汰机制** - **概述**: Redis如何处理内存不足的情况。 - **机制**: LRU、TTL等数据淘汰算法的工作原理。 - **实现**: 数据淘汰的具体实现逻辑。 - **第12章:RDB持久化策略** - **简介*...

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

    "Redis过期策略和内存淘汰机制" Redis是一种基于内存的NoSQL数据库,它具有高效的读写性能和丰富的数据结构。但是,Redis的内存使用量也会不断增加,如果不进行合理的内存管理,将会导致Redis服务器崩溃或性能下降...

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

    Redis 过期-淘汰机制是指将过期的数据或者很久没有访问的数据进行删除的机制。该机制分为主动淘汰和被动淘汰两种。主动淘汰是指用户设定过期时间,例如使用定时过期、惰性过期和定期过期等策略。被动淘汰是指Redis ...

    Redis的缓存机制(11)

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

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

    随着Squirrel的发展,团队面临了Redis在处理Rehash机制时的一些问题,特别是在满容状态和高负载场景下。 Rehash是Redis为了动态调整哈希表大小而执行的操作,当哈希表的负载因子(used/size)达到一定阈值时,Redis...

    Redis启动,数据结构存储系统

    RDB是在特定时间点生成的快照文件,而AOF记录了所有写操作的日志,提供了一种持久化机制来保证数据安全。 - 接着,Redis会监听配置的端口,等待客户端连接。 - 最后,服务启动成功,可以接受命令并执行。 2. **...

    Redis开发实战视频.zip

    0301 Redis数据持久化 0302 RDB持久化机制 0303 RDB数据恢复案例 0304 AOF持久化机制. 0305 AOF数据恢复案例 0306 Redis线程模型 0307 Redis过期数据淘汰 0308 listpack 0309 碎片整理 0310 SLOWLOG 0311 Latency ...

    2021年最新java面试题--视频讲解(内部培训84个知识点超详细).rar

    附有面试讲解视频,不是网盘,下载既有视频,屡试不爽的面试宝典。 Java面试题01.面试的整体流程 Java面试题02.java的垮平台原理 ...Java面试题79:redis数据淘汰机制 Java面试题80:java访问redis级redis集群 ......

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

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

    redisredis redis redis redis

    Redis 的优势在于它的高速读写性能、丰富的数据结构以及持久化机制。 标题中的重复“redisredisredisredis”可能意味着在讨论 Redis 的重要性或强调其在项目中的核心地位。描述部分同样如此,暗示了 Redis 在某场景...

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

    使用Redis缓存时,我们需要注意缓存策略的选择,比如LRU(最近最少使用)或LFU(最不经常使用)算法来决定何时淘汰旧数据。此外,还可能涉及到缓存穿透、缓存雪崩和缓存击穿等问题及其解决方案。 "redis_test"可能...

    redis面试复习.xmind

    ### redis数据类型 (这里对每个数据类型做了一些我个人能理解到的解释,包括实现的数据结构等) # redis持久化 ### 写了快照和命令行模式的优点缺点 (按道理的话本应该写上快照模式的自动和手动,save和bgsave等等,但是...

    Redis_Redis分布式缓存_

    **Redis数据结构与缓存策略** 1. **数据结构**: Redis支持多种数据结构,如字符串、列表、集合、有序集合和哈希表,这些结构适应各种应用场景。例如,哈希表适合存储对象,列表可以用于消息队列,有序集合用于排行...

    05-Redis 核心数据结构 & Redis 6 新特性详解-郭嘉.zip

    在本资料"05-Redis 核心数据结构 & Redis 6 新特性详解-郭嘉.zip"中,我们将深入探讨Redis的核心数据结构以及最新的Redis 6版本的新特性。 一、Redis核心数据结构 1. 字符串(String):Redis最基础的数据类型,可...

    最新版linux redis-5.0.13.tar.gz

    1. Redis数据类型:Redis支持多种数据类型,包括字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)和有序集合(Sorted Sets)。这些数据类型为开发者提供了极大的灵活性,可以在处理各种场景时选择最适合的数据...

    redis7的离线安装包

    1. **Redis简介**:Redis是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它的特点是数据持久化、支持多种数据结构(如字符串、哈希、列表、集合、有序集合)、网络服务、...

Global site tag (gtag.js) - Google Analytics