美文网首页我爱编程
Redis 内存淘汰机制

Redis 内存淘汰机制

作者: yjwlyy | 来源:发表于2018-03-28 17:32 被阅读0次

    Redis内存淘汰指的是用户存储的一些键被可以被Redis主动地从实例中删除,从而产生读miss的情况。Redis最常见的两种应用场景为缓存和持久存储,首先要明确的一个问题是内存淘汰策略更适合于那种场景?是持久存储还是缓存?

    内存的淘汰机制的初衷是为了更好地使用内存,用一定的缓存miss来换取内存的使用效率。

    首先要配置maxmemory值

    1.客户端发起了需要申请更多内存的命令(如set)。

    2.Redis检查内存使用情况,如果已使用的内存大于maxmemory则开始根据用户配置的不同淘汰策略来淘汰内存(key),从而换取一定的内存。

    3.如果上面都没问题,则这个命令执行成功。

    maxmemory为0的时候表示我们对Redis的内存使用没有限制。


    Redis提供了下面几种淘汰策略

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

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

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

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

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

    noeviction:禁止驱逐数据,当内存使用达到阈值的时候,所有引起申请内存的命令会报错

    设置方式   

    config set maxmemory-policy volatile-lru


    试验总结:

    1,版本不同,默认的策略不同

    在2.8.13的版本里,默认是noeviction,在3.2.3版本里默认是volatile-lru

    2,volatile-lru、volatile-ttl、volatile-random这几种只对设置了过期时间的key有效,不会淘汰没有设置过期时间的key

    3,与是否设置持久化无关

    4,测试volatile-lru测量,在插入有过期时间的key时,如果达到了maxmemory值,就会对老的key进行淘汰,插入新值

    5,如果设置为noeviction或者key没有过期时间,当达到最大内存值时就会直接报错


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

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

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

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

    相关文章

      网友评论

        本文标题:Redis 内存淘汰机制

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