zoukankan      html  css  js  c++  java
  • Redis过期机制

    一、过期时间设置

    TTL key : 获取key的过期剩余时间,不存在返回-2  无过期时间返回-1
    PTTL key : 同TTL,毫秒
    EXPIRE key ttl : 将键的生存时间设为 ttl 秒
    PEXPIRE key ttl  :将键的生存时间设为 ttl 毫秒
    EXPIREAT key timestamp :将键的过期时间设为 timestamp 所指定的秒数时间戳
    PEXPIREAT key timestamp: 将键的过期时间设为 timestamp 所指定的毫秒数时间戳
    PERSIST key : 去除ttl属性,不会过期
    

    二、Redis过期策略

    1、被动删除

    • 当读/写一个已经过期的key时,会触发被动删除策略,直接删除掉这个过期key
    • 1、这种删除策略对CPU友好,只会对检测时过期的key进行删除
    • 2、这种删除策略对内存不友好,一个key已经过期,但是在它被检测之前不会被删除,仍然占据内存空间,造成浪费。

    2、主动删除

    • 由于被动删除策略无法保证过期数据被及时删除,所以Redis会定期主动淘汰一批已过期的key

    • Redis会周期性的随机测试一批设置了过期时间的key,比如每隔100毫秒执行以下步骤:

    • 1.随机检测100个设置了过期时间的key

    • 2.删除已过期的key

    • 3.若删除的key超过25个则重复步骤1

    如果有大量的key同时到期,Redis会持续重复上述操作,直到百分比降到25%以下,此操作会持续占用线程资源,导致阻塞

    3、内存不足删除

    • 当已用内存超过maxmemory时,触发主动清理策略

    清除策略

    1. volatile-lru:只对设置了过期时间的key进行LRU(默认)
    2. allkeys-lru : 删除lru算法的key
    3. volatile-random:随机删除即将过期key
    4. allkeys-random:随机删除
    5. volatile-ttl : 删除即将过期的
    6. noeviction : 永不过期
    
    • 当mem_used内存已经超过maxmemory的设定,对于所有的读写请求,都会触发函数清理超出的内存。
    • 注意这个清理过程是阻塞的,直到清理出足够的内存空间。
    • 如果在达到maxmemory并且调用方还在不断写入的情况下,可能会反复触发主动清理策略,导致请求会有一定的延迟。
  • 相关阅读:
    C#执行sql文件
    "C:Program FilesInternet Exploreriexplore.exe" -extoff 无加载项启动IE 浏览器打开时全屏模式
    sql server备份与还原 sql语句
    触摸屏\串口服务器\串口
    USB串行端口
    选取所有表单元素
    C# Bitmap类型与Byte[]类型相互转化
    本文介绍C# BitmapData
    C#多线程学习(六) 互斥对象
    C# List 复制克隆副本
  • 原文地址:https://www.cnblogs.com/gossip/p/13857142.html
Copyright © 2011-2022 走看看