`
leixbo
  • 浏览: 33974 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Redis key过期时间浅谈

阅读更多

Redis通过expire命令来设置key的过期时间,在redis术语里面,把设置了expire time的key 叫做:volatile keys,意思就是不稳定的key。

 

 

过期设置 

 

     语法:EXPIRE key seconds (该命令为参数中指定的Key设定超时的秒数,在超过该时间后,Key被自动的删除。如果该Key在超时之前被修改,与该键关联的超时将被移除。) 

 

或者

 

     语法:EXPIREAT key timestamp    (该命令的逻辑功能和EXPIRE完全相同,唯一的差别是该命令指定的超时时间是绝对时间,而不是相对时间。该时间参数是Unix timestamp格式的,即从1970年1月1日开始所流经的秒数。)

 

    在小于2.1.3的redis版本里,只能对key设置一次expire。redis2.1.3和之后的版本里,可以多次对key使用expire命令,更新key的expire time

 

 

过期时间清除

 

Key过期时间清除的情况:

    1、PERSIST key    如果Key存在过期时间,该命令会将其过期时间消除,使该Key不再有超时,而是可以持久化存储。

    2、SET key newValue 此时会清除过期时间,这个需要特别注意

    3、DEL key        这个很显然会清除过期时间

  

一些触发修改value的操作(除了SET),如lpush,lset,incr等,将不会清除过期时间(redis2.1.3之前的版本是会清除的)。

另外 RENAME 也不会清除过期时间

 

 

过期处理 

 

redis对过期键采用了lazy expiration:在访问key的时候判定key是否过期,如果过期,则进行过期处理。其次,每秒对volatile keys 进行抽样测试,如果有过期键,那么对所有过期key进行处理。

 

删除策略一般由以下几种

 

    定时删除:在设置键的过期时间时,创建一个定时事件,当过期时间到达时,由事件处理器自动执行键的删除操作。

    惰性删除:放任键过期不管,但是在每次从 dict 字典中取出键值时,要检查键是否过期,如果过期的话,就删除它,并返回空;如果没过期,就返回键值。

    定期删除:每隔一段时间,对 expires 字典进行检查,删除里面的过期键。

 

而Redis是采用的惰性删除+定期删除来处理过期数据

 

分享到:
评论

相关推荐

    Redis集群下过期key监听的实现代码

    在使用redis集群时,发现过期key始终监听不到。网上也没有现成的解决方案。于是想,既然不能监听集群,那我可以建立多个redis连接,分别对每个redis的key过期进行监听。以上做法可能不尽人意,目前也没找到好的解决...

    监听redis过期key,做对应业务处理

    需要注意的是,Spring Data Redis默认并不直接支持Key过期事件的监听,而是通过Redis的`EXPIRE`命令设置Key的过期时间。当Key过期时,Redis会自动删除,而Spring Data Redis的缓存事件监听器会在缓存被清除时触发`...

    Redis清理过期key的方法.doc

    定时清理是通过 Redis 配置项 hz 定义的 serverCron 任务的执行周期,默认每次清理时间为 25ms,每次清理会依次遍历所有 DB,从 db 随机取出 20 个key,如果过期就删除,如果其中有 5 个 key 过期,那么就继续对这个...

    Redis获取某个前缀的key脚本实例

    在Redis中,获取带有特定前缀的key是一项常见的需求,特别是在进行数据统计、清理或监控时。传统的`keys`命令虽然能快速找到所有匹配前缀的key,但在大型数据库中,由于其全量扫描的特性,可能导致服务器阻塞。因此...

    监听redis的key的变化

    "监听Redis的key变化"是一个常见的需求,特别是在实时数据处理、事件驱动的系统中。这个主题涉及到Redis的订阅发布(Pub/Sub)模式和Keyspace Notifications功能。 1. Redis的订阅发布(Pub/Sub)模式: - **基本...

    redis命令集合,redis命令详解

    EXPIRE设置某个key的过期时间(秒),(EXPIRE bruce 1000:设置bruce这个key1000秒后系统自动删除)注意:如果在还没有过期的时候,对值进行了改变,那么那个值会被清除。 TTL查找某个key还有多长时间过期,返回时间秒 ...

    Redis_Key操作命令

    通过这些命令,我们可以对Redis数据库中的Key进行管理,包括查找、删除、移动、重命名以及设置过期时间等操作,从而更好地利用Redis的数据存储能力。了解和熟练掌握这些命令对于使用Redis至关重要。

    java操作Redis缓存设置过期时间的方法

    Java 操作 Redis 缓存设置过期时间的方法 Java 操作 Redis 缓存设置过期时间是指在 Java 应用程序中使用 Redis 缓存时设置缓存项的过期时间,以便自动删除缓存项。下面将详细介绍 Java 操作 Redis 缓存设置过期...

    通过Key前缀分析Redis的内存占用按内存大小排序导出结果到csv文件

    本篇文章将围绕“通过Key前缀分析Redis的内存占用并按内存大小排序导出结果到csv文件”这一主题,详细介绍相关的技术知识点。 首先,我们需要理解Redis的内存管理。Redis中每个键值对都有一个内存开销,包括键的...

    spring-redis-session 自定义 key 和过期时间

    Spring-Redis-Session 自定义 key 和过期时间 Spring-Redis-Session 是一个基于 Spring 框架的会话管理模块,它使用 Redis 作为会话存储介质,提供了灵活的会话管理机制。在本文中,我们将详细介绍 Spring-Redis-...

    Redis语法,Key值设计及常用案例介绍

    5. 设置过期时间:`EXPIRE key seconds`,例如 `EXPIRE user:123 86400` 设定键24小时内过期。 二、Redis Key设计原则 1. 简洁性:Key应尽可能短,但保持可读性,例如使用`user:123`而非`username_of_user_123`。 ...

    Redis热点key及大key解决方案.docx

    ### Redis热点Key与大Key解决方案 #### 一、热点Key问题及解决方案 **问题描述**: 在使用Redis作为缓存时,热点Key是指那些访问频率非常高但更新频率相对较低的键值对。这类键的存在可能导致所有请求集中在少数几...

    Python获取Redis所有Key以及内容的方法

    一、获取所有Key # -*- encoding: UTF-8 -*- __author__ = "Sky" import redis pool=redis.ConnectionPool(host='127.0.0.1',port=6379,db=0) r = redis.StrictRedis(connection_pool=pool) keys = r.keys() print ...

    浅谈redis的maxmemory设置以及淘汰策略

    redis的maxmemory参数用于控制redis可使用的最大内存容量。如果超过maxmemory的值...· volatile-lru:在设置了过期时间的键空间中,优先移除最近未使用的key。 · allkeys-random:在主键空间中,随机移除某个key。

    Redis内存过期策略

    ### Redis内存过期策略详解 #### 一、引言 Redis作为一款高性能的键值存储系统,在实际应用中经常被用作缓存解决方案。为了确保内存的有效利用与系统的稳定性,Redis设计了一套高效的内存管理机制,其中包括了针对...

    redis过期监听.docx

    为了启用Redis的键空间通知(Key Space Notifications),我们需要编辑Redis的配置文件。在`/etc/redis/redis.conf`中找到`notify-keyspace-events`选项,将其空字符串改为`"Ex"`。`E`表示事件(Events),`x`表示键...

    spring boot+redis 监听过期Key的操作方法

    Spring Boot+Redis 监听过期 Key 的操作方法 本文主要介绍了使用 Spring Boot 和 Redis 监听过期 Key 的操作方法,这种方法在订单业务中非常有用,可以用来设置订单的有效期限,到了有效期限后如果还未支付,就需要...

    Nodejs实现redis数据Json格式的导出

    console.log(`Key ${key} not found in Redis.`); } }); callback(); } // 使用示例 exportAllKeysToRedis(['key1', 'key2', 'key3'], () => { console.log('Export completed'); }); ``` 这个函数遍历一组...

    Python操作Redis之设置key的过期时间实例代码

    Redis提供了多种方法来设置key的过期时间,这在处理临时或缓存数据时非常有用。本文将详细介绍如何在Python中设置Redis key的过期时间,并提供实例代码供参考。 1. **Expire命令** Redis的`Expire`命令用于设置key...

Global site tag (gtag.js) - Google Analytics