Redis 中 key 过期了一定会立即删除吗?

目录

Redis 中 key 过期了一定会立即删除吗?

一、惰性删除

二、定期删除


在使用 Redis 时,一个常见的问题是:Redis 中 key 过期了一定会立即删除吗?答案是否定的。

Redis 对于过期 key 的删除策略主要有两种:惰性删除和定期删除,这两种策略相结合来保证过期 key 的清理。

一、惰性删除

当 Redis 中的 key 过期后,并不会马上被清除。而是在有请求访问这个 key 的时候,Redis 才会去删除它。例如,以下是一个使用 Java 连接 Redis 并可能触发惰性删除的示例代码:

import redis.clients.jedis.Jedis;

public class RedisLazyDeletionExample {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost", 6379);
        // 设置一个 key 并设置过期时间
        jedis.setex("myKey", 10, "value");
        // 等待一段时间,让 key 过期
        try {
            Thread.sleep(11000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 此时如果没有访问,key 不会被删除
        System.out.println("Before access: " + jedis.exists("myKey"));
        // 访问 key,触发惰性删除
        System.out.println(jedis.get("myKey"));
        System.out.println("After access: " + jedis.exists("myKey"));
        jedis.close();
    }
}

二、定期删除

Redis 在后台会定期地去删除过期的 key。默认情况下,大约每隔 100ms,Redis 会扫描一次过期的 key,然后进行删除。这个扫描的间隔频率可以通过一些参数进行调整。但是,定期删除并不是一次性把所有过期的 key 全部拿出来删除,而是定期随机抽取一部分 key 去做删除。

如果只是采用惰性删除,当有 key 过期后一直没有被访问,那么这个 key 就会一直占用内存。结合定期删除策略,可以在一定程度上清理这些未被访问的过期 key。

然而,即使有这两种删除策略,Redis 中的过期 key 也不会立即被完全删除。这可能会导致在某些情况下,即使删除了很多 key,但 Redis 的内存使用率还是很高。例如,在短时间内删除了巨量的过期 key,可能由于删除机制的原因,内存占用并没有立即下降。

了解 Redis 过期 key 的删除机制,可以帮助我们更好地理解 Redis 的内存管理,在实际应用中遇到类似问题时能够快速定位原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值