精华内容
下载资源
问答
  • 2022-03-27 15:21:23

    一、存储结构

    通过expire,expireat,pexpire,pexpireat命令对key添加过期时间

    expire key seconds # 设置键在给定秒后过期
    pexpire key milliseconds # 设置键在给定毫秒后过期

    expireat key timestamp # 到达指定秒数时间戳之后键过期
    pexpireat key timestamp # 到达指定毫秒数时间戳之后键过期
     

    redis使用的过期键值删除策略是:惰性删除加上定期删除,两者配合使用。

    在redis中有一个单独的空间专门存储expire的数据,expire是以hash的数据结构存储的

    expires 是hash 的key,原数据的存储地址是hash的field,设置的过期时间则是hash的value

    二、redis数据删除策略

    redis有三种数据删除策略,分别是定时删除、惰性删除、定期删除

    1.定时删除

    创建一个定时器,当key设置有过期时间且过期时间到达时,由定时器任务立即执行对键的删除操作

    优点:节省内存,快速释放

    缺点:cpu压力大,删除操作会影响redis响应时间和吞吐量

    2.惰性删除

    数据到达过期时间时不删除,等到下次访问到该数据时删除

    在所有get命令执行之前都会先执行expireIfNeed()方法,

    优点:节约cpu性能,过期的时候不会立即删除

    缺点:内存空间占用过多,很多已经过期的数据可能长期占用内存

    3.定期删除

    3.1定期删除的过程

    redis启动服务器初始化时,会读取配置文件中的hz的值,默认为10

    hz表示每秒执行serverCron()的次数

    serverCron()方法里会执行databaseCron()方法,databaseCron()的功能就是遍历16个redis的数据库

    同时databaseCron()方法还调用了activeExpireCycle()

    1.activeExpireCycle()对每个数据库内的expires逐一进行检测,每次执行250ms/hz

    2.对某个expires检测时,随机挑选W个key进行检测

    3.如果key超时,则删除key

    4.如果删除的key的数量>W*25%,则回到步骤2

    5.如果删除的key的数量<W*25%,则开始检测下一个expires

    其中W的值由ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP属性值决定

    当前activeExpireCron()方法执行到哪个数据库会存储到current_db中

    当activeExpireCycle()执行时间到期,下次会从current_db记录的地方继续执行

    3.2定期删除特点

    占用固定的cpu资源来进行检查和删除过期数据

    更多相关内容
  • redis的数据类型,以及每种数据类型的使用场景 (一)String 这个其实没啥好说的,最常规的set/get操作,value... 那么 volatile-lru, volatile-random 和 volatile-ttl 策略的行为, 和 noeviction(不删除) 基本上一致。

    redis的数据类型,以及每种数据类型的使用场景
    (一)String 这个其实没啥好说的,最常规的set/get操作,value可以是String也可以是数字。一般做一些复杂的计数
    功能的缓存。
    (二)hash 这里value存放的是结构化的对象,比较方便的就是操作其中的某个字段。博主在做单点登录的时候,就
    是用这种数据结构存储用户信息,以cookieId作为key,设置30分钟为缓存过期时间,能很好的模拟出类似session
    的效果。
    (三)list 使用List的数据结构,可以做简单的消息队列的功能。另外还有一个就是,可以利用lrange命令,做基于
    redis的分页功能,性能极佳,用户体验好。

    (四)set 因为set堆放的是一堆不重复值的集合。所以可以做全局去重的功能。为什么不用JVM自带的Set进行去重?
    因为我们的系统一般都是集群部署,使用JVM自带的Set,比较麻烦,难道为了一个做一个全局去重,再起一个公共
    服务,太麻烦了。 另外,就是利用交集、并集、差集等操作,可以计算共同喜好,全部的喜好,自己独有的**喜
    好等功能**。
    (五)sorted set
    sorted set多了一个权重参数score,集合中的元素能够按score进行排列。可以做排行榜应用,取TOP N操作。另
    外,参照另一篇《分布式之延时任务方案解析》,该文指出了sorted set可以用来做延时任务。最后一个应用就是
    可以做范围查找。

    redis的过期策略以及内存淘汰机制

    # maxmemory-policy volatile-lru

    该配置就是配内存淘汰策略的(什么,你没配过?好好反省一下自己) 1)noeviction:当内存不足以容纳新写入数据
    时,新写入操作会报错。应该没人用吧。 2)allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最
    近最少使用的key。推荐使用,目前项目在用这种。 3)allkeys-random:当内存不足以容纳新写入数据时,在键
    空间中,随机移除某个key。应该也没人用吧,你不删最少使用Key,去随机删。 4)volatile-lru:当内存不足以容
    纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key。这种情况一般是把redis既当缓存,又
    做持久化存储的时候才用。不推荐 5)volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键
    空间中,随机移除某个key。依然不推荐 6)volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键
    空间中,有更早过期时间的key优先移除。不推荐 ps:如果没有设置 expire 的key, 不满足先决条件
    (prerequisites); 那么 volatile-lru, volatile-random 和 volatile-ttl 策略的行为, 和 noeviction(不删除) 基本上一致。

    展开全文
  • Redis 定期删除ZSet中无效的Member

    千次阅读 2020-04-17 08:42:57
    如果使用redis zset结构,key不能直接设置过期时间,又想对member设置过期删除时,可以使用这个脚本根据score进行过期删除。大家可以参考下,score的格式需要自定义调整下。 删除脚本redis-del-keys.sh (main) #!/...

    如果使用redis zset结构,key不能直接设置过期时间,又想对member设置过期删除时,可以使用这个脚本根据score进行过期删除。大家可以参考下,score的格式需要自定义调整下。

    删除脚本redis-del-keys.sh (main)

    #!/bin/bash
    ##redis主机IP
    host=$1
    ##redis端口
    port=$2
    ##redis端口
    password=$3
    ##redis db
    db=$4
    ##key模式
    pattern=$5
    ##游标
    cursor=0
    ##退出信号
    signal=0
    ##将一周前此时刻转换为时间戳,精确到毫秒
    end=`date "+%Y%m%d%H%M" -d '7 day ago'`
    ##将一周前此时刻转换为时间戳,精确到毫秒
    start=`date "+%Y%m%d%H%M" -d '1000 day ago'`
    echo $end
    
    
    ##循环获取key并删除
    while [ $signal -ne 1 ]
        do
            echo "cursor:${cursor}"
            sleep 2
            echo $host
            ##将redis scan得到的结果赋值到变量
            re=$(redis-cli -h $host -p $port -a $password -n $db -c  scan $cursor count 1000 match $pattern)
            echo $port
            ##以换行作为分隔符
            IFS=$'\n' 
            #echo $re
            echo 'arr=>'
            ##转成数组
            arr=($re)
            ##打印数组长度
            echo 'len:'${#arr[@]}
            ##第一个元素是游标值
            cursor=${arr[0]}
            ##游标为0表示没有key了
            if [ $cursor -eq 0 ];then
                signal=1
            fi
            ##循环数组
        for key in ${arr[@]}
            do
                ##echo $key
                if [ $key != $cursor ];then
                    echo "key:"$key
                    ##删除key
                    redis-cli -h $host -p $port -a $password -n $db -c zremrangebyscore $key $start $end >/dev/null  2>&1
                fi
        done
    done
    echo 'done'
    

    时间转换

    timeformat=$1
    before=`date "+%Y-%m-%d %H:%M:%S" -d '7 day ago'`  
    timeStamp=`date -d "$before" +%s`   
    #将current转换为时间戳,精确到毫秒  
    endtime=$((timeStamp*1000+`date "+%N"`/1000000)) 
    
    if [ "$timeformat" = "minute" ]; then
    	#将current转换为时间戳,精确到毫秒
    	endtime=$(date "+%Y%m%d%H%M" -d '7 day ago')
    fi
    echo $endtime
    

    脚本如上

    linux定时调度配置
    chmod 744 /app/redis-4.0.8/sh/redis-del-keys.sh
    crontab -e

    每天凌晨两点调度

    0 2 * * * /app/redis-4.0.8/sh/redis-del-keys.sh

    使用示例
    sh redis-del-keys.sh local 6379 12345 5 userid:*

    其中‘redis-del-keys.sh’为删除脚本(main), ‘local 6379 12345’ 分别为host、port、password, ‘5’为db index, ‘userid:*’为key的前缀

    展开全文
  • redis内存淘汰策略之定期删除原理

    千次阅读 2020-04-18 20:55:25
  • 九、redis删除机制

    2022-03-02 14:43:11
    redis是采用定期删除+惰性删除策略 一)redis有三种不同的删除机制 redis数据库键的过期时间都保存在过期字典中,根据系统时间和存活时间判断是否过期。  1,定时删除:实现方式,创建定时器  2,惰性删除:...
  • 3. 定期删除 4. 删除策略比对 三、逐出算法 1. 新数据进入检测 2. 影响数据逐出的相关配置 3. 数据逐出策略配置依据 一、过期数据 Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过...
  • Redis删除策略

    千次阅读 2020-07-07 22:38:31
    卑微小吴励志写博客第29天。 删除策略 过期删除 redis中的数据特征 redis是一种内存级数据库,所有的数据均存储在内存中,通过TTL指令可以查看数据的状态。...这就是redis删除策略做的事,redis有三种删除策略.
  • 一、Redis 过期删除策略类型 我们都知道,Redis 是 key-value 数据库,我们可以设置 Redis 中缓存的 key 的过期时间,而 Redis 的过期策略就是指:当 Redis 中缓存的 key 过期了,Redis 如何处理。 过期策略通常有...
  • 定期删除 惰性删除 redis 会将每个设置了过期时间的 key 放入到一个独立的字典中,以后会定时遍历这个字典来删除到期的 key。除了定时遍历之外,它还会使用惰性策略来删除过期的 key,所谓惰性策略就是在客户端访问...
  • Redis 删除策略

    2020-11-04 07:50:07
    删除策略有: 定时删除,惰性删除,定期删除。 2.1 时效性数据的存储结构 2.2 数据删除策略的目标 在内存占用与CPU占用之间寻找一种平衡,顾此失彼都会造成整体redis性能的下降,甚至引发服务器宕机或内存泄露。 ...
  • Redis过期删除是如何做的?

    千次阅读 2019-08-29 17:39:30
    当一个键处于过期的状态,其实在 Redis 中这个内存并不是实时就被从内存中进行摘除,而是 Redis 通过一定的机制去把一些处于过期键进行移除,进而达到内存的释放,那么当一个键处于过期,Redis 会在什么时候去删除?...
  • 转载下面的链接 https://blog.csdn.net/weixin_43230682/article/details/107670911
  • Redis的过期删除策略就是:惰性删除和定期删除两种策略配合使用。 惰性删除:惰性删除不会去主动删除数据,而是在访问数据的时候,再检查当前键值是否过期,如果过期则执行删除并返回 null 给客户端,如果没有过期则...
  • 介绍了redis中的数据删除与淘汰策略。
  • Redis中通过以下指令都能为key设置一个生命周期 sexex key seconds //只适用于String数据类型 expire key seconds expireat key timestamp pexpire key milliseconds pexpireat key millitimestamp 当这些数据...
  • 最近寒假没事干,写了一个靶场项目,关于创建一个容器时,会给它一个半个小时的到期时间,这里就有了定时的需求,我需要在靶场到期的时候对它进行删除 想了很多办法,什么用springboot的定时任务每秒去数据库中查询...
  • Redis的内存回收机制主要体现在两个方面: ...惰性删除策略不对过期键进行处理,此时因为内存没有达到Redis的maxmemory上限而没触发淘汰策略,程序只会在访问键的时候进行过期检查,当键超过过期时间即
  • 定时自动删除redis key

    千次阅读 2021-05-08 10:26:06
    二是不设置key的过期时间,使得redis像貔貅一样只进不出,不断膨胀。 由于对用户的群发消息量很大,使得redis几天就内存报警。开始时使用单实例redis,遇到报警就增加maxmemory配置。后来将单实例进行拆分,按照...
  • redis 每天定时删除某个key

    千次阅读 2021-08-20 11:56:42
    假设key每天6点过期,利用redis的setex命令添加key并设置过期时间,过期时间设置为明天6点减去现在时间。 setex key timeout value 等于 set key value expire key timeout 二、Java代码实现 redisTemplate....
  • 了解完同步删除和异步删除你将对Redis的认识会更上一层楼。加油 名次解释 : Redis存储数据的k-v结构是用字典实现的。k对应的过期时间的存储也是用字典实现。 键空间 : 用于存储数据库的k-v数据。 过期键空间 : 用于...
  • Redis三种删除策略

    千次阅读 2020-04-21 14:41:45
    首先我们先说一下redis删除的是过期数据,而什么是过期数据呢?过期数据就是设置了有效性的数据到达了过期时间的数据. TTL指令获取数据状态 返回时间:具有时效性的数据 返回-1:表示永久有效的数据 返回-2:表示已经...
  • Redis过期时间三种删除策略详解

    千次阅读 2021-10-04 19:44:01
    redis中的数据有一个过期时间,比如验证码、token等。当数据过了期限后,应该要被删除redisDb中有两个dict对象,dict内部实现的是哈希...Redis中提供了三种删除策略: 1、定时删除 当放入数据后,设置一个定时器,当
  • Redis过期键的删除策略 对于过期键一般有三种删除策略 定时删除:在设置键的过期时间的同时,创建一个定时器(timer),让... 定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。至于删除...
  • 本文主要从Redis键过期时间的设置,过期时间的保存以及过期键的删除策略四个方面对Redis中键过期时间进行了阐述。
  • Redis过期删除策略

    2022-05-10 09:15:55
    定期删除策略: 概念:在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即执行对键的删除操作。(创建定时器删除) 优点: 对内存最友好:通过使用定时器,可以保证过期的键会尽可能...
  • redisDb结构的expires字典保存了数据库中所有键的过期时间,我们称这个字典为过期字典: ❑过期字典的键是一个指针,这个指针指向键空间中的某个键对象(也即是某个数据库键)。 ❑过期字典的值是一个long long类型...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,984
精华内容 10,793
关键字:

redis定期删除

友情链接: 1769431.rar