• redis 内存管理与数据淘汰机制(转载)


    原文地址:http://www.jianshu.com/p/2f14bc570563?from=jiantop.com

    最大内存设置

    默认情况下,在32位OS中,Redis最大使用3GB的内存,在64位OS中则没有限制。

    在使用Redis时,应该对数据占用的最大空间有一个基本准确的预估,并为Redis设定最大使用的内存。否则在64位OS中Redis会无限制地占用内存(当物理内存被占满后会使用swap空间),容易引发各种各样的问题。

    通过如下配置控制Redis使用的最大内存:

    maxmemory 100mb

    在内存占用达到了maxmemory后,再向Redis写入数据时,Redis会:

    • 根据配置的数据淘汰策略尝试淘汰数据,释放空间
    • 如果没有数据可以淘汰,或者没有配置数据淘汰策略,那么Redis会对所有写请求返回错误,但读请求仍然可以正常执行

    在为Redis设置maxmemory时,需要注意:

    • 如果采用了Redis的主从同步,主节点向从节点同步数据时,会占用掉一部分内存空间,如果maxmemory过于接近主机的可用内存,导致数据同步时内存不足。所以设置的maxmemory不要过于接近主机可用的内存,留出一部分预留用作主从同步。

    数据淘汰机制

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

    • volatile-lru:使用LRU算法进行数据淘汰(淘汰上次使用时间最早的,且使用次数最少的key),只淘汰设定了有效期的key
    • allkeys-lru:使用LRU算法进行数据淘汰,所有的key都可以被淘汰
    • volatile-random:随机淘汰数据,只淘汰设定了有效期的key
    • allkeys-random:随机淘汰数据,所有的key都可以被淘汰
    • volatile-ttl:淘汰剩余有效期最短的key

    最好为Redis指定一种有效的数据淘汰策略以配合maxmemory设置,避免在内存使用满后发生写入失败的情况。

    一般来说,推荐使用的策略是volatile-lru,并辨识Redis中保存的数据的重要性。对于那些重要的,绝对不能丢弃的数据(如配置类数据等),应不设置有效期,这样Redis就永远不会淘汰这些数据。对于那些相对不是那么重要的,并且能够热加载的数据(比如缓存最近登录的用户信息,当在Redis中找不到时,程序会去DB中读取),可以设置上有效期,这样在内存不够时Redis就会淘汰这部分数据。

    配置方法:

    maxmemory-policy volatile-lru #默认是noeviction,即不进行数据淘汰



    作者:kelgon
    链接:http://www.jianshu.com/p/2f14bc570563
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    268. Missing Number
    217. Contains Duplicate
    189. Rotate Array
    Two Sum II
    122. Best Time to Buy and Sell Stock II
    169. Majority Element
    C# ConfigurationManager不存在问题解决
    C# sqlhelper
    C#基础
    数据库事务日志已满的解决办法
  • 原文地址:https://www.cnblogs.com/xiaolang8762400/p/7226269.html
Copyright © 2020-2023  润新知