精华内容
下载资源
问答
  • redis设置key过期时间

    万次阅读 2013-12-11 17:16:47
    redis设置key过期时间非常简单: SETEX mykey 10 "Hello" 这样就给mykey设置了10秒的生存周期。 但是当你使用了redis其他的数据结构,比如LIST,HMAP等,就没有现成的命令可以使用了。不过在redis中,上面...

    redis是一个广泛应用的key-value型内存数据库,和memecached一样,key是可以被设置生存周期的。

    redis设置key的过期时间非常简单:

    SETEX mykey 10 "Hello"


    这样就给mykey设置了10秒的生存周期。

    但是当你使用了redis其他的数据结构,比如LIST,HMAP等,就没有现成的命令可以使用了。不过在redis中,上面的命令本来就等效于下面两条命令

    SET mykey value
    EXPIRE mykey 10

    EXPIRE可以给redis内任意类型的key设置过期时间,如给HMAP类型的key设置过期时间可以用

    HSET mykey hkey "hello"
    EXPIRE mykey 10

    我们可以将两条命令存储为一个MULTI/EXEC存储过程,或者用支持pipline的redis客户端


    下面来谈一下redis过期的key的删除机制:

    不同于memcached的LAZY模式,redis对于设置了过期时间的key采用被动模式和主动模式相结合的方式:

    • 被动模式,同memcached,当过期的key被访问时,redis会将其删除
    • 主动模式,主动模式为redis主动触发的一个以10秒为间隔的循环:
      1. 随机测试100个key的过期时间
      2. 删除这100个key中所有已经过期的key
      3. 如果删除了超过25个key,立刻从第一步开始重做

     



    展开全文
  • Redis设置key过期时间

    千次阅读 2018-04-25 08:19:24
    expire(key,seconds),其中seconds单位为 s容易混淆的有这两种:existss(key),检查key是否存在,存在返回1hexistx(key,field)查看哈希中key中的field是否存在

    expire(key,seconds),其中seconds单位为 s

    容易混淆的有这两种:

    existss(key),检查key是否存在,存在返回1

    hexistx(key,field)查看哈希中key中的field是否存在


    展开全文
  • 前言 之前在项目中某个功能用redis做限流,里面需要对Key...如果这个key过期之后,重新设置key初始值为1,过期时间设置为1分钟。这种写法咋看好像没啥问题,但是熟悉redis的小伙伴可能就觉得,在incr之后为什么要重...

    前言

    之前在项目中某个功能用redis做限流,里面需要对Key设置1分钟的过期时间。请求进来的时候对这个key进行incr。在incr之前特意重新获取了这个key的过期时间,然后在incr之后,将刚刚获取的过期时间重新设置到这个key上。如果这个key过期之后,重新设置key初始值为1,过期时间设置为1分钟。这种写法咋看好像没啥问题,但是熟悉redis的小伙伴可能就觉得,在incr之后为什么要重新设置key为新的过期时间。其实在redis中对于incr确实不需要多次一举了,incr操作不会去清除这个key之前设置的过期时间。那么我为什么要多次一举呢,主要是因为把redis中的set操作和incr搞错了。redis对key设置新的值之后,key之前设置的过期时间会被清除,我以为incr操作也是如此,所以导致了这个问题。对于redis还是要认真去学习下那些细节,一知半解可不是什么好事,说不定哪天在就在项目中挖了个大坑。下面来和大家一起学习redis中对key设置过期的小知识。

    具体小细节

    DEL/SET/GETSET等命令会清除过期时间

    在使用DEL、SET、GETSET等会覆盖key对应value的命令操作一个设置了过期时间的key的时候,会导致对应的key的过期时间被清除。

    //设置key的过期时间为150s
    127.0.0.1:6379> set key hello ex 150
    OK
    127.0.0.1:6379> ttl key
    (integer) 144  
    //使用set命令覆盖key的内容
    127.0.0.1:6379> set key aiqinhai
    OK
    //过期时间被清除
    127.0.0.1:6379> ttl key
    (integer) -1

    可以看到ttl key的时候返回-1,说明这个key的过期时间已经被清楚,这里额外说下ttl返回-2,说明这个key不存在,不要搞串了。

    INCR/LPUSH/HSET等命令不会清除过期时间

    而在使用INCR/LPUSH/HSET这种只是修改一个key的value,而不是覆盖整个value的命令,则不会清除key的过期时间。下面以INCR为例

    //设置incr_key的过期时间为300s
    127.0.0.1:6379> set incr_key 1 ex 300
    OK
    127.0.0.1:6379> ttl incr_key
    (integer) 291
    //进行自增操作
    127.0.0.1:6379> incr incr_key
    (integer) 2
    127.0.0.1:6379> get incr_key
    "2"
    //查询过期时间,发现过期时间没有被清除
    127.0.0.1:6379> ttl incr_key
    (integer) 277

    和上面的对比,显然可以看到之前设置的过期时间是有效的。

    PERSIST命令会清除过期时间

    当使用PERSIST命令将一个设置了过期时间的key转变成一个持久化的key的时候,也会清除过期时间。

    127.0.0.1:6379> set persist_key haha ex 300
    OK
    127.0.0.1:6379> ttl persist_key
    (integer) 296
    //将key变为持久化的
    127.0.0.1:6379> persist persist_key
    (integer) 1
    //过期时间被清除
    127.0.0.1:6379> ttl persist_key
    (integer) -1

    使用RENAME命令,老key的过期时间将会转到新key上

    在使用例如:RENAME KEY_A KEY_B命令将KEY_A重命名为KEY_B,不管KEY_B有没有设置过期时间,新的key KEY_B将会继承KEY_A的所有特性。

    //设置key_a的过期时间为300s
    127.0.0.1:6379> set key_a value_a ex 300
    OK
    //设置key_b的过期时间为600s
    127.0.0.1:6379> set key_b value_b ex 600
    OK
    127.0.0.1:6379> ttl key_a
    (integer) 279
    127.0.0.1:6379> ttl key_b
    (integer) 591
    //将key_a重命名为key_b
    127.0.0.1:6379> rename key_a key_b
    OK
    //新的key_b继承了key_a的过期时间
    127.0.0.1:6379> ttl key_b
    (integer) 248

    使用EXPIRE/PEXPIRE设置的过期时间为负数会导致key被删除

    127.0.0.1:6379> set key_1 aiqinhai
    OK
    127.0.0.1:6379> get key_1
    "aiqinhai"
    //设置过期时间为-1
    127.0.0.1:6379> expire key_1 -1
    (integer) 1
    //发现key被删除
    127.0.0.1:6379> get key_1
    (nil)

    EXPIREAT设置过期时间为过去时间也是如此,这里不做演示了。

    EXPIRE命令可以更新过期时间

    对一个已经设置了过期时间的key使用expire命令,可以更新其过期时间。

    //设置key_1的过期时间为100s
    127.0.0.1:6379> set key_1 aiqinhai ex 100
    OK
    127.0.0.1:6379> ttl key_1
    (integer) 95
    //更新key_1的过期时间为300s
    127.0.0.1:6379> expire key_1 300
    (integer) 1
    127.0.0.1:6379> ttl key_1
    (integer) 295

    总结

    上面大致介绍了redis设置超时时间一些小细节,这些小细节不搞清楚,往往就是一个大雷,抑或在测试那就是一个bug。

    参考文献

    https://juejin.im/post/5d6bda096fb9a06acc009dc8#comment

    展开全文
  • redis 获取key 过期时间

    万次阅读 2019-01-22 17:07:06
    redis 获取key 过期时间
                   
    <pre name="code" class="html">127.0.0.1:6379> keys *b4f107c6-e96c-4a1e-8402-a3be9a619847*1) "shiro_redis_session:b4f107c6-e96c-4a1e-8402-a3be9a619847"127.0.0.1:6379> get  "shiro_redis_session:b4f107c6-e96c-4a1e-8402-a3be9a619847""\xac\xed\x00\x05sr\x00*org.apache.shiro.session.mgt.SimpleSession\x9d\x1c\xa1\xb8\xd5\x8cbn\x03\x00\x00xpw\x02\x00\xdbt\x00$b4f107c6-e96c-4a1e-8402-a3be9a619847sr\x00\x0ejava.util.Datehj\x81\x01KYt\x19\x03\x00\x00xpw\b\x00\x00\x01U\xa0\t1\xf3xsq\x00~\x00\x03w\b\x00\x00\x01U\xa0:|\x18xw\x18\x00\x00\x00\x00\x00\x1bw@\x00\x0e10.168.255.134sr\x00\x11java.util.HashMap\x05\a\xda\xc1\xc3\x16`\xd1\x03\x00\x02F\x00\nloadFactorI\x00\tthresholdxp?@\x00\x00\x00\x00\x00\x0cw\b\x00\x00\x00\x10\x00\x00\x00\at\x00\x0baccountInfosr\x00\x1ecom.zjzc.common.vo.AccountInfo\x00\x00\x00\x00\x00\x00\x00\x01\x02\x00\x05L\x00\x0baccountTypet\x00\x12Ljava/lang/String;L\x00\brealNameq\x00~\x00\nL\x00\x02snq\x00~\x00\nL\x00\buserNickq\x00~\x00\nL\x00\x04uuidq\x00~\x00\nxpt\x00\x011t\x00\t\xe8\xb5\xb5\xe6\x9d\xa8\xe5\x81\xa5pt\x00\x0fzhaoyangjian724t\x00 20150925104158452da9e0c7979d4438t\x00\nVerifyCodet\x00\x04fnunt\x00\x12isAdminSystemLoginsr\x00\x11java.lang.Boolean\xcd r\x80\xd5\x9c\xfa\xee\x02\x00\x01Z\x00\x05valuexp\x00t\x00\x0bRefererSitet\x00\x00t\x00Porg.apache.shiro.subject.support.DefaultSubjectContext_AUTHENTICATED_SESSION_KEYsq\x00~\x00\x13\x01t\x00\x0baccessTokent\x00 09146c71cc85fa6ce6077b2179417020t\x00Morg.apache.shiro.subject.support.DefaultSubjectContext_PRINCIPALS_SESSION_KEYsr\x002org.apache.shiro.subject.SimplePrincipalCollection\xa8\x7fX%\xc6\xa3\bJ\x03\x00\x01L\x00\x0frealmPrincipalst\x00\x0fLjava/util/Map;xpsr\x00\x17java.util.LinkedHashMap4\xc0N\\\x10l\xc0\xfb\x02\x00\x01Z\x00\x0baccessOrderxq\x00~\x00\x06?@\x00\x00\x00\x00\x00\x0cw\b\x00\x00\x00\x10\x00\x00\x00\x01t\x00\x0b18072722237sr\x00\x17java.util.LinkedHashSet\xd8l\xd7Z\x95\xdd*\x1e\x02\x00\x00xr\x00\x11java.util.HashSet\xbaD\x85\x95\x96\xb8\xb74\x03\x00\x00xpw\x0c\x00\x00\x00\x02?@\x00\x00\x00\x00\x00\x01q\x00~\x00!xx\x00w\x01\x01q\x00~\x00 xxx"redis 查看keys 的有效期:127.0.0.1:6379> ttl  "shiro_redis_session:b4f107c6-e96c-4a1e-8402-a3be9a619847"(integer) 1194Redis TTL命令用于获取键到期的剩余时间(秒)。返回值以毫秒为单位的整数值TTL或负值TTL以毫秒为单位。-1, 如果key没有到期超时。-2, 如果键不存在。现在设置键到期,之后只需查看到期的剩余时间。127.0.0.1:6379> set tutorialname 987789OK127.0.0.1:6379> get tutorialname"987789"127.0.0.1:6379> EXPIRE tutorialname 60(integer) 1127.0.0.1:6379> TTL tutorialname(integer) 31127.0.0.1:6379> TTL tutorialname(integer) 30127.0.0.1:6379> TTL tutorialname(integer) 29127.0.0.1:6379> TTL tutorialname(integer) 29127.0.0.1:6379> TTL tutorialname(integer) 27127.0.0.1:6379> 127.0.0.1:6379> TTL tutorialname(integer) 1127.0.0.1:6379> TTL tutorialname(integer) 0127.0.0.1:6379> TTL tutorialname(integer) -2127.0.0.1:6379> TTL tutorialname(integer) -2127.0.0.1:6379> get tutorialname(nil)127.0.0.1:6379> get tutorialnamesession 管理机制 比如session 设置30分钟, 但是你登陆后session 又会归位到30分钟


                
    

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • 使用SpringDataRedis设置key过期时间

    千次阅读 2018-12-30 19:02:45
    设置过期时间调用的方法如下. 第一个参数为key 第二个参数为值 第三个参数为过期时间 千万注意 要以L结尾.代表为Long类型. 否则过期时间不会生效 redisTemplate.opsForValue().set("mykeys", myvalue, 1L,...
  • Redis Expire 命令用于设置 key过期时间key 过期后将不再可用。 用法:Expire key 127.0.0.1:6379 [8] > set keyname keyvalue OK 127.0.0.1:6379 [8] > expire keyname 30 (integer) 1 设置了keyname...
  • Redis设置Key过期时间 – EXPIRE命令

    万次阅读 2017-03-14 14:04:07
    为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除。 在 Redis 中,带有生存时间的 key 被称为『易失的』(volatile)。 生存时间可以通过使用 DEL 命令来删除整个 key 来...
  • Redis key过期时间和永久有效分别怎么设置? EXPIRE和PERSIST命令。
  • 主要介绍了Python操作Redis设置key过期时间实例代码,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
  • Redis-设置Key过期时间及相关策略

    千次阅读 2019-10-15 16:57:27
    Redis-设置Key过期时间及相关策略1、设置key过期时间1.1expire key second:设置key过期时间(秒)1.2ttl key:查看key的有效期1.3persist key:清除key过期时间Key持久化2、为key设置过期时间需要注意的...
  • 一、在为key设置过期时间需要注意的事项 1. DEL/SET/GETSET等命令会清除过期时间 在使用DEL、SET、GETSET等会覆盖key对应value的命令操作一个设置过期时间key的时候,会导致对应的key过期时间被清除。 //...
  • redis key 过期时间如何设置

    万次阅读 2013-11-27 21:09:53
    redis中所有的key都有可以设置过期时间: EXPIRE key 100 设置过期时间,100秒后,key将自动被删除。 过期时间删除的方法有三种: 1、删除这个key,使用del command 2、用set or getset 命令会将key的expiration...
  • redis如何设置过期时间

    千次阅读 2019-01-18 11:55:38
    redis如何设置过期时间 memcached 和 redis 的set命令都有...它的key过期策略还是和memcached有所不同的。 梳理,整理如下: redis通过expire命令来设置key的过期时间。 ****语法:redis.expire(key, expiration) ...
  • 设置Rediskey过期时间

    千次阅读 2017-03-27 17:43:34
    key设置一个过期时间(timeout),一旦时间到了,这个key将会被自动删除。这种特性术语通常叫做Redis的不稳定性。  一旦设置过期时间,这个key只能被命令清除、删除或者重写其内容。这些命令包含del、set、...
  • Rediskey过期设置、查询、清理

    千次阅读 2020-11-18 19:23:46
    redis提供了一些命令,能够让我们对key设置过期时间,并且让key过期之后被自动删除 2.redis过期时间相关命令 1.EXPIRE PEXPIRE  EXPIRE接口定义:EXPIRE key "seconds"  接口描述:设置一个key在当前时间...
  • 在实际的开发项目中,监听 key过期事件,...修改为 “notify-keyspace-events Ex”,这样我们的 Redis 就支持 key 过期事件的监听了 二、注入redisMessageListenerContainer 注意:本偏文章衔接与上篇文章:【Sprin
  • 批量设置redis-key过期时间 WHAT 批量的给redis中***同样前缀***的key设置失效时间。 WHY 由于之前没有考虑到数据量的问题,在redis中建了大量永久的key,早上发现redis内存满了,一对定时任务挂掉了,于是...
  • Redis批量设置Key过期

    千次阅读 2019-03-28 14:51:08
    Redis批量设置Key过期,一般有两种方式:lua脚本和pipeline1。 lua脚本 -- expire_keys.lua 存放在classpath的script目录中 for i=1, ARGV[1], 1 do redis.call("PEXPIRE", KEYS[i], ARGV[2]); end //过期时间,...
  • redis监听key过期事件

    千次阅读 2019-05-27 11:03:19
    redis监听key过期事件1.redis config2.新开终端redis-cli 监听过期事件3.新开终端redis-cli4.监听生效,第二步的redis-cli中收到了过期事件。其他:在laravel中监听redis key过期事件 1.redis config notify-...
  • Redis设置过期时间

    2021-05-18 09:17:48
    在使用redis作为缓存存储值的时候,一般都是需要设置值的过期时间,否则日积月累的垃圾数据就会占用大量的内存空间; 设置过期时间可以分开设置也可以一条语句设置 分开设置设置值再设置过期时间,这种方式...
  • 批量设置redis-key过期时间

    千次阅读 2018-11-23 11:08:56
    由于之前没有考虑到数据量的问题,在redis中建了大量永久的key,早上发现redis内存满了,一对定时任务挂掉了,于是打算给这些key设置失效时间. HOW(使用xargs) 之前有批量删除key的方法: redis-cli -h 127.0.0.1...
  • Redis设置和更新Key过期时间

    万次阅读 2018-09-29 19:34:12
    为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除。 在 Redis 中,带有生存时间的 key 被称为『易失的』(volatile)。 生存时间可以通过使用 DEL 命令来删除整个 key 来移除,...
  • rediskey过期时间详解 :expire

    万次阅读 2016-08-22 17:05:36
    redis 下key的过期时间详解 :expire ...但是redis是一个可以对数据持久化的key-value database,它的key过期策略还是和memcached有所不同的。梳理,整理如下:   redis通过expire命令来设置ke
  • 主要介绍了python redis 批量设置过期key过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • Redis中,给Key设定过期(Expire)时间来可以实现这类时效性需求,并通过发布/订阅(Pub/Sub)机制来接收Key过期失效的消息以做后续处理,结合Redis的HA – Sentinel,可以保障此类业务的不间断性  我在项目...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 99,934
精华内容 39,973
关键字:

redis设置key的过期时间

redis 订阅