redis数据淘汰策略

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

在 redis 中,容许用户设置最大使用内存大小 server.maxmemory,在内存限定的状况下是颇有用的。譬如,在一台 8G 机子上部署了 4 个 redis 服务点,每个服务点分配 1.5G 的内存大小,减小内存紧张的状况,由此获取更为稳健的服务。算法

redis 内存数据集大小上升到必定大小的时候,就会施行数据淘汰策略。redis 提供 6种数据淘汰策略:dom

  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(驱逐):禁止驱逐数据

redis 肯定驱逐某个键值对后,会删除这个数据并,并将这个数据变动消息发布到本地(AOF 持久化)和从机(主从链接)。spa

设置:server

Redis.conf配置文件中修改“maxmemory-policy”属性值。 如果Redis数据集中的key都设置了过时时间,那么“volatile-ttl”策略是比较好的选择。但若是key在达到最大内存限制时没可以迅速过时,或者根本没有设置过时时间。那么设置为“allkeys-lru”值比较合适,它容许Redis从整个数据集中挑选最近最少使用的key进行删除(LRU淘汰算法)。内存

经过设置maxmemory为系统可用内存的45%或95%(取决于持久化策略)和设置“maxmemory-policy”为“volatile-ttl”或“allkeys-lru”(取决于过时设置),能够比较准确的限制Redis最大内存使用率,在绝大多数场景下使用这2种方式可确保Redis不会进行内存交换。假若你担忧因为限制了内存使用率致使丢失数据的话,能够设置noneviction值禁止淘汰数据。部署