美文网首页
redis淘汰策略

redis淘汰策略

作者: 吕艳凯 | 来源:发表于2020-04-06 12:29 被阅读0次

    长期将Redis作为缓存使用,难免会遇到内存空间存储瓶颈,当Redis内存超出物理内存限制时,内存数据就会与磁盘产生频繁交换,使Redis性能急剧下降。
    Redis在生产环境中,采用配置参数maxmemory 的方式来限制内存大小。当实际存储内存超出maxmemory 参数值时,开发者们可以通过这几种方法——Redis内存淘汰策略,来决定如何腾出新空间继续支持读写工作。

    当前Redis3.0版本支持的淘汰策略有6种:

    不淘汰
    1. no-enviction:禁止驱逐数据 (故名思意,在内存不足,再次存数据时报错,不对已有数据处理)
    随机淘汰
    1. allkeys-random:从数据集(server.db[i].dict)中选择任意数据淘汰。
    过期时间淘汰
    1. volatile-ttl: 从设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰,ttl值(剩余生存时间)越小越优先被淘汰
    2. volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰。当内存达到限制无法写入非过期时间的数据集时,可以通过该淘汰策略在主键空间中随机移除某个key。
    LRU淘汰
    1. volatile-lru:从设置过期时间的数据集(server.db[i].expires)中挑选出最近最少使用的数据淘汰。没有设置过期时间的key不会被淘汰,这样就可以在增加内存空间的同时保证需要持久化的数据不会丢失。
    2. allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰,该策略要淘汰的key面向的是全体key集合,而非过期的key集合。

    淘汰策略理解:

    LRU淘汰:

    LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。
    其数据结构是哈希链表的结构,当访问数据时将被访问节点调整到链表头,淘汰时即可淘汰链表尾部,即是最近最少访问

    TTL淘汰:

    Redis 数据集数据结构中保存了键值对过期时间的表,即 redisDb.expires。TTL 数据淘汰机制中会先从过期时间的表中随机挑选几个键值对,取出其中 ttl 最大的键值对淘汰。
    注意:TTL淘汰策略并不是面向所有过期时间的表中最快过期的键值对,而只是随机挑选的几个键值对。

    相关文章

      网友评论

          本文标题:redis淘汰策略

          本文链接:https://www.haomeiwen.com/subject/wngvphtx.html