zoukankan      html  css  js  c++  java
  • redis 过期策略

    过期策略

    定期删除+惰性删除

    所谓定期删除,指的是 redis 默认是每隔 100ms随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除。

    1.注意,这里可不是每隔 100ms 就遍历所有的设置过期时间的 key。而是每隔 100ms 随机抽取一些 key 来检查和删除的。

    2.问题,定期删除可能会导致很多过期 key 到了时间并没有被删除掉,所以就有了惰性删除:

    即在你获取某个 key 的时候,redis 会检查一下这个 key, 如果设置了过期时间并且过期了,则在此时就删掉这个key,不会返回任何内容。

    3.实际上,如果定期删除漏掉了很多过期 key,也没去查询这些key,也就没走惰性删除,那么如果大量过期 key 堆积在内存里,导致 redis 内存块耗尽了,咋整?

    答案是:走内存淘汰机制。

    内存淘汰机制

    --redis官方文档

    redis 内存淘汰机制有以下几个:

    • allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 key。最常用的
    • noeviction: 当内存不足以容纳新写入数据时,新写入操作会报错。
    • allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个 key。
    • volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的 key。
    • volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个 key。
    • volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的 key 优先移除。

    LRU相关请移步这篇文章LRU

  • 相关阅读:
    Objective-C 和 Core Foundation 对象相互转换
    sql学习笔记(18)-----------数据库创建过程
    JVM虚拟机结构
    自己定义控件-MultipleTextView(自己主动换行、自己主动补齐宽度的排列多个TextView)
    Blue Jeans
    怎样注冊 diskgroup 到集群
    改动购物项图书数量的Ajax处理
    leetcode_Integer to Roman
    Buildroot 龙芯1C支持指南
    Buildroot構建指南--Overview【转】
  • 原文地址:https://www.cnblogs.com/charm-j/p/10373410.html
Copyright © 2011-2022 走看看