Redis:简述Redis的数据淘汰机制

Redis:简述Redis的数据淘汰机制


Redis在每个服务客户端执行一个命令的时候,都会先检测使用的内存是否超额。

在Redis中,我们可以设置Redis的最大使用内存大小(server.maxmemory)。当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-envivtion(驱逐):禁止驱逐数据。

LRU机制: Redis保存了lru计数器server.lrulock,会定时的去更新(redis定时程序severCorn()),每个Redis对象都会设置相应的lru值,每次访问对象的时候,Redis都会更新redisObject.lru。
LRU淘汰机制: 在数据集中随机挑选几个键值对,取出其中lru最大的键值对淘汰。所以,Redis并不能保证淘汰的数据都是最近最少使用的,而是随机挑选的键值对中的。

TTL机制: Redis数据集结构中保存了键值对过期时间表,即 redisDb.expires。
TTL淘汰机制: 在数据集中随机挑选几个键值对,取出其中最接近过期时间的键值对淘汰。所以,Redis并不能保证淘汰的数据都是最接近过期时间的,而是随机挑选的键值对中的。


参考:https://yq.aliyun.com/articles/578220?utm_content=m_45558

你可能感兴趣的:(数据库之非关系型数据库)