• redis 提供 6种数据淘汰策略


    redis 提供 6种数据淘汰策略

    淘汰策略的原因

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

    6中淘汰策略

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

    volatile-lru:从设置了过期时间的数据集中,选择最近最久未使用的数据释放;
    allkeys-lru:从数据集中(包括设置过期时间以及未设置过期时间的数据集中),选择最近最久未使用的数据释放;
    volatile-random:从设置了过期时间的数据集中,随机选择一个数据进行释放;
    allkeys-random:从数据集中(包括了设置过期时间以及未设置过期时间)随机选择一个数据进行入释放;
    volatile-ttl:从设置了过期时间的数据集中,选择马上就要过期的数据进行释放操作;
    noeviction:不删除任意数据(但redis还会根据引用计数器进行释放),这时如果内存不够时,会直接返回错误。
    

    记忆方式:
    单词组成:3个volatile开头的,2个all_keys开头。都是lru,random,只有volatile有ttl方式。最后加一个noeviction
    volatile:指的都是快过期的数据集。
    all_keys:是所有的数据集。
    lrc:是选择最近长时间不使用的,一般用作缓存机制。
    random:就是随机选一个。
    ttl:就是过期时间的设置
    noeviction:不做任何设置

    默认的内存策略是noeviction,在Redis中LRU算法是一个近似算法,默认情况下,Redis随机挑选5个键,并且从中选取一个最近最久未使用的key进行淘汰,在配置文件中可以通过maxmemory-samples的值来设置redis需要检查key的个数,但是检查的越多,耗费的时间也就越久,但是结构越精确(也就是Redis从内存中淘汰的对象未使用的时间也就越久~),设置多少,综合权衡。

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

    配置文件

    # maxmemory <bytes>
    # volatile-lru -> remove the key with an expire set using an LRU algorithm
    # allkeys-lru -> remove any key according to the LRU algorithm
    # volatile-random -> remove a random key with an expire set
    # allkeys-random -> remove a random key, any key
    # volatile-ttl -> remove the key with the nearest expire time (minor TTL)
    # noeviction -> don't expire at all, just return an error on write operations
    # The default is:
    # maxmemory-policy noeviction
    

    我们可以设置maxmemory ,当数据达到限定大小后,会选择配置的策略淘汰数据

     
  • 相关阅读:
    LuoguP1126 机器人搬重物(BFS)
    POJ1950----DFS
    C
    B
    A
    C
    B
    A
    A
    B
  • 原文地址:https://www.cnblogs.com/xiao-xue-di/p/12572652.html
Copyright © 2020-2023  润新知