关于复述,数据淘汰策略详解

  

今天小编给大家分享的是关于复述,数据淘汰策略详解,很多人都不太了解,今天小编为了让大家更加了解复述,数据淘汰策略,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。

关于复述,数据淘汰策略详解

本文讲的是当复述,设定了最大内存之后,缓存中的数据集大小超过了一定比例,实施的淘汰策略,不是删除过期键的策略,虽然两者非常相似。

在复述中,允许用户设置最大使用内存大小通过配置复述。设计中的maxmemory这个值来开启内存淘汰功能,在内存限定的情况下是很有用的。

设置最大内存大小可以保证复述对外提供稳健服务。

推荐:复述,教程

复述,内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略.redis提供6种数据淘汰策略通过maxmemory-policy设置策略:

volatile-lru:从已设置过期时间的数据集(server.db[我].expires)中挑选最近最少使用的数据淘汰

volatile-ttl:从已设置过期时间的数据集(server.db[我].expires)中挑选将要过期的数据淘汰

volatile-random:从已设置过期时间的数据集(server.db[我].expires)中任意选择数据淘汰

allkeys-lru:从数据集(server.db[我].dict)中挑选最近最少使用的数据淘汰

allkeys-random:从数据集(server.db[我]。dict)中任意选择数据淘汰

no-enviction(驱逐):禁止驱逐数据

复述,确定驱逐某个键值对后,会删除这个数据并将这个数据变更消息发布到本地(AOF持久化)和从机(主从连接)

<强> LRU数据淘汰机制

在服务器配置中保存了LRU计数器服务器。lrulock,会定时(复述,定时程序serverCorn())更新,服务器。lrulock的值是根据服务器。unixtime计算出来的。

另外,从结构redisObject中可以发现,每一个复述对象都会设置相应的lru。可以想象的是,每一次访问数据的时候,会更新redisObject。lru .

lru数据淘汰机制是这样的:在数据集中随机挑选几个键值对,取出其中lru最大的键值对淘汰,所以,你会发现,复述,并不是保证取得所有数据集中最近最少使用(lru)的键值对,而只是随机挑选的几个键值对中的。

//redisServer保存了lru计数器      struct redisServer {      …      无符号lruclock: 22;/*时钟每分钟递增,LRU */?      };//每一个复述对象都保存了lru      #定义REDIS_LRU_CLOCK_MAX ((1 & lt; & lt; 21) 1)/*最大的价值obj→lru */#定义REDIS_LRU_CLOCK_RESOLUTION 10 *//* LRU时钟分辨率在秒      typedef struct redisObject {//刚刚好32位//对象的类型,字符串/列表/集合/哈希表      无符号类型:4;//未使用的两个位      无符号notused: 2;/* *///编码的方式,复述,为了节省空间,提供多种方式来保存一个数据//譬如:“123456789”会被存储为整数123456789      无符号编码:4;      无符号lru: 22;/* lru时间(相对于server.lruclock) *///引用数      int refcount;//数据指针      void * ptr;      }robj;//复述,定时执行程序。联想:linux cron      int serverCron (struct aeEventLoop * eventLoop,长长的id, void * clientData) {      ……/*我们刚刚22位/对象LRU的信息。      *我们使用一个(最终包装)LRU与10秒分辨率时钟。      * 2 ^ 10秒分辨率的22位或多或少是1.5年。      *      *请注意,即使这将包装后1.5年变# 39;不是一个问题,      *一切仍将工作,但仅仅是一些对象会显得更年轻      *复述。但要实现这一目标给定对象不应该碰它们      *为1.5年。      *      *请注意,您可以更改分辨率改变      * REDIS_LRU_CLOCK_RESOLUTION定义。      */updateLRUClock ();      ……      }//更新服务器的lru计数器      空白updateLRUClock (void) {      服务器。lruclock=(server.unixtime/REDIS_LRU_CLOCK_RESOLUTION),      REDIS_LRU_CLOCK_MAX;      }

<>强TTL数据淘汰机制

复述,数据集数据结构中保存了键值对过期时间的表,即redisDb。到期。和LRU数据淘汰机制类似,TTL数据淘汰机制是这样的:从过期时间的表中随机挑选几个键值对,取出其中TTL最大的键值对淘汰。同样你会发现,复述,并不是保证取得所有过期时间的表中最快过期的键值对,而只是随机挑选的几个键值对中的。

总结

复述,每服务客户端执行一个命令的时候,会检测使用的内存是否超额。如果超额,即进行数据淘汰。

关于复述,数据淘汰策略详解