Redis 中的生存时间详解

AI 编程助手,豆包旗下的编程助手,提供智能补全、智能预测、智能问答等能力,节省开发时间,释放脑海中的创造力,支持 VSCode,点击体验 AI

简介

Redis 是一款流行的开源 NoSQL 数据库,被广泛用于缓存、消息队列和排行榜等领域。其中,键值对是 Redis 最基本的数据结构,而每个键值对都可以设置一个生存时间(TTL),过期后会自动从数据库中删除。本文将详细介绍 Redis 中的生存时间机制,并提供示例代码以方便理解。

TTL 的设置

使用 Redis 命令 EXPIRE key seconds 可以为一个键值对设置生存时间,或者使用 SET key value EX seconds 在设置键值对的同时指定生存时间。例如:

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

如果要取消已经设置的生存时间,可以使用命令 PERSIST key

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

还有一个特殊值 -1 ,表示将该键设置为永久存储。

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

过期策略

Redis 中有两种过期策略:定时删除和惰性删除。

定时删除

定时删除是 Redis 最简单的过期策略。当一个键过期时,Redis 将其标记为要删除,并把它放入到一个任务队列中。 Redis 会每秒钟从队列中选出一部分键来删除,直到数据库中所有过期的键都被删除。

惰性删除

如果定时删除不能及时清除过期键,Redis 就会使用惰性删除策略。当用户尝试获取一个键值对时,Redis 首先检查它是否已经过期。如果过期则将其删除。这个机制使得不需要定期地遍历整个数据库以查找已过期的键,从而提高了性能。

过期通知

Redis 在数据库中删除一个键值对之前会先发送一个过期通知(expired event)。应用程序可以通过订阅 __keyevent@<db>__:expired 频道来接收过期通知。例如:

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

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

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

注意事项

  • 虽然 Redis 可以用于缓存,但使用 TTL 不等同于缓存的时间生命周期。如果你使用 Redis 作为缓存,应该遵循缓存的最佳实践,例如设置适当大小的缓存、设置 LRU 或 LFU 淘汰策略等。
  • 使用 TTL 可能会导致内存泄漏。如果一个键被频繁更新,它的生存时间会被不断延长,从而导致数据库占用过多内存。避免出现这种情况的方法是使用定期刷新(refresh)替代 TTL 删除。

结论

Redis 中的键值对生存时间机制,以及其常见的过期策略和通知机制,为开发者提供了强大的工具,用于管理 Redis 数据库中数据的存储和删除。合理地使用 Redis 的生存时间功能可以有效地改善数据库性能,并减少内存占用。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/6729a8392e7021665e2538e9


猜你喜欢

  • Serverless 架构中的安全漏洞扫描技巧

    Serverless 架构是一种将应用程序构建成微服务的新型架构体系,它可以帮助企业实现业务流程简化、节省成本和提高应用程序性能。然而,在使用 Serverless 架构时,我们一定要注意安全等问题,...

    3 天前
  • Promise.resolve() 的使用及注意事项

    在前端开发中,Promise 是一种用于管理异步操作的解决方案。而 Promise.resolve() 是 Promise 构造函数的静态方法之一,其主要作用是创建一个解析后带有给定值的 Promis...

    3 天前
  • 如何利用 Mongoose 实现异步操作与回调处理

    Mongoose 是一个用于在 Node.js 应用中管理 MongoDB 数据库的优秀库。它提供了一些方便的方法来实现数据库操作,并且在设计上非常适合前端开发人员。

    3 天前
  • Next.js 同构的实现与应用

    介绍 在现代 web 应用程序中,客户端渲染已成为前端开发的主流方法。但是,客户端渲染也会带来一些问题,如 SEO、性能和可访问性。这些问题可以通过服务端渲染(SSR)来解决,SSR 可以使你的网站快...

    3 天前
  • 如何使用 CSS Grid 实现复杂的多列布局?

    在前端开发中,布局一直都是一项重要的任务。在许多情况下,需要实现复杂的多列布局。这时候,我们可以使用 CSS Grid 来实现这样的布局。 CSS Grid 是一个强大的布局工具,它可以帮助我们在网页...

    3 天前
  • 使用 Express.js 和 MongoDB 创建 RESTful API 的步骤

    介绍 在本篇文章中,我们将介绍如何使用 Express.js 和 MongoDB 创造 RESTful API。Express.js 是一个广泛使用的 Node.js 应用程序框架,而 MongoDB...

    3 天前
  • Redux 中的错误处理技巧

    Redux 中的错误处理技巧 Redux 是一个流行的前端状态管理库,它以其可预测性和可扩展性而闻名。虽然 Redux 在前端开发中得到了广泛应用,但是当应用程序出现错误时,Redux 中的错误处理必...

    3 天前
  • 关于 Socket.IO 中的跨域请求问题的解决方案

    在前端开发中,跨域请求是一个很常见的问题。当我们用 Socket.IO 进行 socket 连接时,同样也可能出现跨域请求问题。本篇文章将会介绍 Socket.IO 中的跨域请求问题,并提供一些解决方...

    3 天前
  • 使用 Jest 进行多语言应用的测试优化方案详解

    对于多语言应用而言,测试是至关重要的一环。在多语言应用中,需要确保各种语言版本的用户都能够正常使用应用程序,而不会出现翻译错误、排版错误等问题。为了更好地保证多语言应用的测试质量,我们可以使用 Jes...

    3 天前
  • 如何正确使用 Web 无障碍的元素分组功能

    前言 在 Web 开发中,让网站易于访问对于提供优秀的用户体验至关重要。许多 Web 用户面临各种易于访问性挑战,例如视力障碍、听力障碍、运动障碍和认知障碍等。这就需要开发人员关注和实现 Web 无障...

    3 天前
  • PWA 中遇到的图片自适应问题及解决办法

    前言 PWA(Progressive Web App)是一种新型的 Web 应用程序模型,可以在手机和电脑上同样流畅地使用。它的核心思想是为用户提供更好的使用体验,包括离线访问、消息推送、响应速度等方...

    3 天前
  • 如何避免在 Server-sent Events(SSE) 中产生内存泄漏问题

    如何避免在 Server-sent Events(SSE) 中产生内存泄漏问题 在 Web 应用程序中,Server-Sent Events(SSE)是一种非常流行的实时通信技术。

    3 天前
  • Kubernetes 中如何管理持久存储

    在 Kubernetes 上部署应用程序时,需要考虑到数据的存储问题。一些应用程序需要持久的存储来保存状态和数据。这就需要使用 Kubernetes 中的持久存储卷来实现。

    3 天前
  • ECMAScript 2019 中的 Promise.allSettled 快速完整处理多个异步操作?

    在前端开发中,我们经常需要处理多个异步操作,例如多个接口请求返回的数据需要合并。在过去使用 Promise.all 时,一旦有一个异步操作出现异常,就会导致整个 Promise.all 的异常处理走向...

    3 天前
  • 智能硬件的实现和 Material Design 架构探索

    智能硬件的实现和 Material Design 架构探索 随着智能硬件的不断发展,越来越多的前端开发人员开始涉足这个领域。但是由于硬件和软件交互的复杂性,前端开发人员需要学习新的技术和理念。

    3 天前
  • Serverless 应用中的自动化测试技巧

    Serverless 架构是一种越来越流行的技术架构,在 Serverless 应用中,后端逻辑通常是由云厂商提供的无服务器计算服务处理的。而前端开发人员主要负责编写前端代码和构建 Serverles...

    3 天前
  • 如何使用 Chai 和 Mocha 测试 Redux 应用的异步操作

    Redux 是一个流行的 JavaScript 应用程序状态管理库。在应用程序中使用 Redux,可以更好地管理应用程序的状态和数据流。但是,Redux 应用程序的异步操作可以使测试变得困难。

    3 天前
  • 使用 ES8 中的 Object.getOwnPropertyDescriptors() 方法生成复杂的对象

    JavaScript 中的对象是一个非常有用的数据类型,它能够跨越各种场景,从简单的键值对到复杂的实例对象。ES8 中引入了一个新方法,即 Object.getOwnPropertyDescripto...

    3 天前
  • 使用 CSS Grid 实现网页水平居中的方法

    在网页开发中,水平对齐一直是很重要的一部分,特别是在响应式设计中更是如此。CSS Grid 提供了一种简单而有效的方法来实现网页的水平居中,并且比其他技术更加灵活。

    3 天前
  • Angular 响应式表单如何处理重置表单数据

    无论是在前端开发或是移动应用开发中,表单都是必不可少的一部分。在开发响应式表单时,我们常常需要实现清空表单数据的功能。Angular 提供了一种简单又便捷的方式来实现重置数据的操作。

    3 天前

相关推荐

    暂无文章