天猫二面:内存耗尽后Redis会发生什么?

2022-04-08 12:18:21 浏览数 (1)

作为一台服务器来说,内存并不是无限的,所以总会存在内存耗尽的情况,那么当 Redis 服务器的内存耗尽后,如果继续执行请求命令,Redis 会如何处理呢?

设置有效期

使用Redis 服务时,很多情况下某些键值对只会在特定的时间内有效,为了防止这种类型的数据一直占有内存,我们可以给键值对设置有效期。Redis 中可以通过 4 个独立的命令来给一个键设置过期时间:

  • expire key ttl:将 key 值的过期时间设置为 ttl
  • pexpire key ttl:将 key 值的过期时间设置为 ttl 毫秒
  • expireat key timestamp:将 key 值的过期时间设置为指定的 timestamp 秒数
  • pexpireat key timestamp:将 key 值的过期时间设置为指定的 timestamp 毫秒数

PS:不管使用哪一个命令,最终 Redis 底层都是使用 pexpireat 命令来实现的。另外,set 等命令也可以设置 key 的同时加上过期时间,这样可以保证设值和设过期时间的原子性。

设置了有效期后,可以通过 ttlpttl 两个命令来查询剩余过期时间(如果未设置过期时间则下面两个命令返回 -1,如果设置了一个非法的过期时间,则都返回 -2):

  • ttl key 返回 key 剩余过期秒数。
  • pttl key 返回 key 剩余过期的毫秒数。

过期策略

0 人点赞