您的位置:

Redis设置key永不过期

一、Redis设置key永不过期的原因

在实际开发中,有些数据是非常重要的,需要永久存储,而且不能因为时间的缘故而被自动删除。Redis设置key永不过期的功能就可以帮我们实现这个需求。

二、Redis设置key永不过期无效

我们可以使用Redis命令:PERSIST key 来将一个带有过期时间的键值对变为永久存在的。但是,有时会遇到有些key即使设置了PERSIST,也无法让其永久存在的情况。

原因在于,只有当Redis Server的内存比较充足时,Redis才会启用过期键移除机制。当Redis内存告急时,它会根据策略选择删除哪些过期的键值对以释放内存。如果key被选中了,那么即使它有PERSIST标志,也会被删除。

三、Redis设置过期时间不生效

在Redis中,可以使用TTL命令来查看某个key的过期时间,使用EXPIRE命令来设置key的过期时间。但是,有些情况下,设置过期时间可能并不会生效。

一个常见的情况是当我们使用SET命令设置一个已经存在的key时,如果我们设置了该key的过期时间,但是该key之前并没有过期,那么过期时间设置将不会生效。此时,只有等到该key过期后再重新设置过期时间才会生效。

四、Redis设置key永不过期弊端

虽然设置key永不过期功能很方便,但是也会带来一些弊端。

  • 占用过多内存资源,因为这些key永不过期,所以Redis会一直占用内存。如果数据量过大,内存资源会变得紧张,甚至可能导致Redis Server崩溃。
  • 如果key对应的值随着时间的推移有更新,但永远不会被删除,意味着Redis中很多数据的存储已经没有了意义,因为它们已经过时了。这无疑会浪费大量的存储空间。

五、Redis设置key过期时间

1. EXPIRE命令

EXPIRE命令可以设置一个key的过期时间,单位是秒。例如:

  
    # 设置key为test的过期时间为3600秒(1小时)
    > EXPIRE test 3600
  

2. PEXPIRE命令

PEXPIRE命令和EXPIRE命令类似,但是单位是毫秒。例如:

  
    # 设置key为test的过期时间为3600000毫秒(1小时)
    > PEXPIRE test 3600000
  

3. EXPIREAT命令

EXPIREAT命令可以设置一个key的过期时间点,以UNIX时间戳的形式表示。例如:

  
    # 设置key为test的过期时间为2022年12月31日23时59分59秒
    > EXPIREAT test 1740643199
  

4. PEXPIREAT命令

PEXPIREAT命令和EXPIREAT命令类似,但是单位是毫秒。例如:

  
    # 设置key为test的过期时间为2022年12月31日23时59分59秒999毫秒
    > PEXPIREAT test 1740643199999
  

5. PERSIST命令

PERSIST命令可以使一个带有过期时间的key变成永久存在的。例如:

  
    # 将key为test的过期时间取消,以便让它永久存在
    > PERSIST test
  

六、Redis设置key永不过期作用

Redis设置key永不过期功能是非常方便的,对于一些重要数据的存储非常有用。它可以实现数据的永久保存,避免数据被误删除或误覆盖。

比如,我们可以将系统的一些配置信息、用户的登录状态等永久保存在Redis中,当我们需要使用这些数据时,可以直接从Redis中读取,而无需频繁的从数据库读取。

七、Redis设置key永不过期设置 -1

除了使用PERSIST命令使key永不过期外,我们还可以将key的过期时间设置为-1,表示该key永不过期。例如:

  
    # 设置key为test永不过期
    > EXPIRE test -1
  

八、Redis设置key永久有效

为了使key永久有效,我们可以使用PEXPIREAT命令,将过期时间点设置为未来极远的时间。例如:

  
    # 设置key为test永不过期
    > PEXPIREAT test 99999999999999
  

九、Redis设置过期时间的命令选取

在日常使用中,我们使用最多的命令是EXPIRE和PEXPIRE。如果需要将过期时间点设置为未来的某个时间,可以使用EXPIREAT和PEXPIREAT命令;如果需要将key变成永久存在的,可以使用PERSIST命令。