美文网首页
Redis从入门到精通(三、Redis的过期策略和内存淘汰机制)

Redis从入门到精通(三、Redis的过期策略和内存淘汰机制)

作者: QuoVadis_k | 来源:发表于2019-05-07 23:37 被阅读0次

    此篇介绍了Redis过期策略以及Redis的内存淘汰机制,从内存淘汰的8种策略,如何开启内存淘汰策略如何选择合适的淘汰策略,对Redis的内存淘汰机制做了全方位的阐述

    Redis 过期策略

    Redis 可以对 key 设置过期时间,这是一个非常实用的功能,那 Redis 是如何实现这个机制的呢?答案就是:定期删除 + 惰性删除

    • 定期删除,Redis默认每隔100ms会从设置了过期时间的key中随机抽取一部分来检查是否过期,如果过期就删除。
    • 惰性删除,定期删除可能会导致很多设置了过期时间的key没有被及时删除,所以就有了惰性删除,即在查询这个key时,检查一下是否过期,如果过期就删除。

    Redis 内存淘汰机制

    结合定期删除 + 惰性删除 Redis 实现了key的过期时间机制,但还是会有一些key会没有被定期删除掉,也没有被查询,就遗留在了内存中,当数据量大到一定程度后,会导致内存的堆积。这就涉及到了 内存淘汰机制

    当内存容量到达了上限或者 配置的maxmemory时,会触发 内存淘汰策略

    Redis提供了8种策略供我们选择:

    1. volatile-lru -> Evict using approximated LRU among the keys with an expire set.
    2. allkeys-lru -> Evict any key using approximated LRU.
    3. volatile-lfu -> Evict using approximated LFU among the keys with an expire set.
    4. allkeys-lfu -> Evict any key using approximated LFU.
    5. volatile-random -> Remove a random key among the ones with an expire set.
    6. allkeys-random -> Remove a random key, any key.
    7. volatile-ttl -> Remove the key with the nearest expire time (minor TTL)
    8. noeviction -> Don't evict anything, just return an error on write operations.

    先明确一下 LRULFU:

    • LRU(Least Recently Used) : 淘汰最近最少使用的数据,基于访问时间
    • LFU(Least Frequently Used): 淘汰最不经常使用的数据,基于访问次数

    怎么开启Redis 的内存淘汰机制

    redis.conf 中:

    • 配置 maxmemory <bytes> ,设置Redis的最大内存空间
    • 配置maxmemory-policy noeviction,设置淘汰策略,默认为 noeviction

    如何选择淘汰策略

    • allkeys-lruallkeys-lfu 适用于存在热点数据的情况。明确有一部分数据访问频率较高,其余数据访问频率较低或者无法预测使用频率。
    • allkeys-random 适用于所有数据访问概率大致相等
    • volatile-ttl 根据过期时间的先后顺序进行删除
    • volatile-lru ,volatile-lruvolatile-random 适用于希望一些数据能被保存,则可以从设置了过期时间的数据中进行删除

    至于LRU与LFU的选择,则需要根据业务权衡到底是选择 淘汰最近最少使用(LRU) 还是选择 最不经常使用(LFU)

    总的来说,无论是 LRU LFU TTL 还是Random 都是几近算法来实现的,在可靠性和性能上做了一定的平衡。还是应该在业务中主动删除没有价值的数据,或者更新某些key的过期时间等来提高Redis的性能和空间,不能过分依赖于淘汰策略。


    更多资料参考:

    Redis-expire-官方文档

    Redis-lru-cache-官方文档

    相关文章

      网友评论

          本文标题:Redis从入门到精通(三、Redis的过期策略和内存淘汰机制)

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