zoukankan      html  css  js  c++  java
  • Redis之淘汰策略

    Redis 内存数据集大小上升到一定大小的时候,就会进行数据淘汰策略。

    Redis 提供了 6 种数据淘汰策略:

    1. volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰。

    2. volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰。

    3. volatile-random:从已设置过期时间的数据集中任意选择数据淘汰。

    4. allkeys-lru:从数据集中挑选最近最少使用的数据淘汰。

    5. allkeys-random:从数据集中任意选择数据淘汰,当内存达到限制的时候,对所有数据集挑选随机淘汰,可写入新的数据集。

    6. no-enviction:当内存达到限制的时候,不淘汰任何数据,不可写入任何数据集,所有引起申请内存的命令会报错。

    7. allkeys-lfu 从数据集(server.db[i].dict)中挑选使用频率最小的数据淘汰,该策略要淘汰的key面向的是全体key集合,而非过期的key集合。

    8. volatile-lfu 从设置过期时间的数据集(server.db[i].expires)中挑选出使用频率最小的数据淘汰。没有设置过期时间的key不会被淘汰,这样就可以在增加内存空间的同时保证需要持久化的数据不会丢失

    如何配置:

    我们通过配置redis.conf中的maxmemory这个值来开启内存淘汰功能。

    # maxmemory

    值得注意的是,maxmemory为0的时候表示我们对Redis的内存使用没有限制。

    根据应用场景,选择淘汰策略

    # maxmemory-policy noeviction

    设置最大内存

    config set maxmemory 100000

    设置淘汰策略

    config set maxmemory-policy noeviction

    三、如何选择淘汰策略

    下面看看几种策略的适用场景

    allkeys-lru:如果我们的应用对缓存的访问符合幂律分布,也就是存在相对热点数据,或者我们不太清楚我们应用的缓存访问分布状况,我们可以选择allkeys-lru策略。

    allkeys-random:如果我们的应用对于缓存key的访问概率相等,则可以使用这个策略。

    volatile-ttl:这种策略使得我们可以向Redis提示哪些key更适合被eviction。

    另外,volatile-lru策略和volatile-random策略适合我们将一个Redis实例既应用于缓存和又应用于持久化存储的时候,然而我们也可以通过使用两个Redis实例来达到相同的效果,值得一提的是将key设置过期时间实际上会消耗更多的内存,因此我们建议使用allkeys-lru策略从而更有效率的使用内存。

    备注:

      1) 在64bit系统下,maxmemory设置为0表示不限制Redis内存使用,在32bit系统下,maxmemory隐式不能超过3GB。当Redis内存使用达到指定的限制时,就需要选择一个置换的策略

      2)置换策略是如何工作的

        理解置换策略的执行方式是非常重要的,比如:

      1. 客户端执行一条新命令,导致数据库需要增加数据(比如set key value)

      2. Redis会检查内存使用,如果内存使用超过maxmemory,就会按照置换策略删除一些key

      3. 新的命令执行成功

       3) 在Redis  4.x版本以后支持le LFU策略,最少频率使用

  • 相关阅读:
    7款纯CSS3实现的炫酷动画应用
    9款基于HTML5/SVG/Canvas的折线图表应用
    8款耀眼的jQuery/HTML5焦点图滑块插件
    10款很酷的HTML5动画和实用应用 有源码
    13款精彩实用的最新jQuery插件
    9款超绚丽的HTML5/CSS3应用和动画特效
    8款最受欢迎的HTML5/CSS3应用及源码
    Zookeeper可以干什么
    MySQL数据库优化
    SQL语句的执行过程
  • 原文地址:https://www.cnblogs.com/xingxia/p/redis_enviction.html
Copyright © 2011-2022 走看看