Redis 中如何删除已过期的 key

阅读时长 3 分钟读完

Redis 是一种常用的开源内存数据库,它支持多种数据结构和高效的数据存储/访问。在 Redis 中,我们可以为每个 key 设置过期时间,当 key 到期后,Redis 会自动将其删除。本文将探讨如何在 Redis 中删除已过期的 key。

Redis 中的过期时间

在 Redis 中,我们可以为每个 key 设置过期时间,使其在一定时间后自动过期。在设置过期时间时,我们可以使用 EXPIREEXPIREAT 命令:

设置过期时间后,可以通过 TTL 命令查询 key 的剩余时间,单位为秒:

Redis 中的过期 key

当 key 过期后,Redis 会将其删除,使其释放存储空间。但是,过期 key 的删除并不是实时进行的,而是周期性地扫描数据库并检查是否有过期的 key,然后删除它们。因此,即使 key 已经过期,它仍然可能存在于数据库中一段时间。

另外,即使 key 已被删除,也不会立即释放该 key 占用的内存。Redis 仍然会继续使用该内存来存储新的 key,直到 Redis 的内存占用达到指定的阈值,才会释放该内存。

如何删除已过期的 key

为了确保内存利用率和性能最大化,我们需要定期删除已过期的 key。Redis 提供了多种删除已过期 key 的方式:

定期删除

Redis 会周期性地对数据库进行检查,并删除已过期的 key。我们可以通过设置 dbconfig 中的 hz 参数,来控制定期删除的频率。默认情况下,hz 参数设置为 10,表示每秒检查 10 次数据库。

惰性删除

Redis 提供了惰性删除机制,它会在获取 key 时检查其是否过期,并删除过期的 key。惰性删除可以确保覆盖更多的 key,但会增加访问延迟。

手动删除

我们也可以手动删除过期的 key。Redis 提供了 DEL 命令,可删除指定的 key。如果 key 已经过期,DEL 命令可以立即将其删除:

范例

下面是一个简单的 Python 范例,演示如何使用 Redis 定期删除已过期的 key:

-- -------------------- ---- -------
------ ----
------ -----

- -- ----- ---
- - ----------------------------- ---------- -----

- -- --- -----
-------------- -------- ------

- ----------- ---
----- -----
    ---- - --------
    --- --- -- -----
        --- - ----------
        -- --- - --
            -------------
            -------------- ------- ---- ----------------
    -------------

这段代码会每秒钟检查一次已有的 key,如果发现某个 key 已经过期,就删除它。可以将其添加到后台任务中,以定期删除过期的 key。

结论

在 Redis 中,我们可以为每个 key 设置过期时间,并使用定期删除、惰性删除或手动删除来删除已过期的 key。注意,过期 key 的删除可能不是实时进行的,因此我们需要定期删除已过期的 key,以确保最大限度地利用内存并提高性能。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6774ec826d66e0f9aaf1c52b

纠错
反馈