IT袋

当前位置:主页 > 经验教程 > 建站编程 >

Redis如何为List/Set/Hash的元素设置单独的过期时间

Redis如何为List/Set/Hash的元素设置单独的过期时间

时间:2023-12-16 12:47:20 来源:IT袋 作者:马勇
导读:Redis如何为List/Set/Hash的元素设置单独的过期时间,本文摘要:Redis如何为List/Set/Hash的元素设置单独的过期时间的相关经验,下面IT袋网为您详细介绍 1. 引言 1.1 消费队列 这天,不念在购买火车票时,发现如果存在一个未支

Redis如何为List/Set/Hash的元素设置单独的过期时间

本文摘要:Redis如何为List/Set/Hash的元素设置单独的过期时间的相关经验,下面IT袋网为您详细介绍

1. 引言

1.1 消费队列

这天,不念在购买火车票时,发现如果存在一个未支付的订单时,就不能再进行购票了。如果把待支付的订单放在一个队列里面,那么队列的长度就只能是 1.

正好最近用 Redis 比较多,于是,我突发奇想,如何用 Redis 原生的数据结构实现一个简易版的延时消费队列呢?

业务状态图如下:

Redis如何为List/Set/Hash的元素设置单独的过期时间

并且,需要保证队列的长度是可控的,比如,我们只允许用户有 3 个未支付的订单。

1.2 Redis实现

Redis,作为一款高性能的缓存和数据存储数据库,一直以来都是后台开发者的得力助手。

如果用 Redis 作为消费队列,那么我们可以用到的数据结构有:List、Hash 和 Set。在上述的业务场景中,由于我们只需要关注 orderId(订单 ID),因此这三个数据结构都是可用的。

比如,用 hash 来存储时,我们可以将 key 设置为 UnpaidOrder-{userId},每个 field 都是一个订单。

Redis如何为List/Set/Hash的元素设置单独的过期时间

但是,我们现在面临一个挑战:每个订单的存活时长是不同的,分为手动消费和定期删除的逻辑。

  • 订单 1 手动支付后,需要将 orderId1 从列表中删除
  • 订单 2 在半小时内还未支付,就自动过期,用户还可以继续提交订单到未支付状态

所以在 List、Set 或者 Hash 结构中,每个 field 都需要设置单独的过期时间。

这是一个常见而又棘手的问题,本文将从互联网业务中常见的解决方案入手,来深入探讨一下 Redis 的底层实现。

2. 常见方案

在实际业务中,我们经常会遇到这样的场景:需要统计某些字段的个数,并且这些字段的过期时间各有先后。

就上述场景而言,我们需要统计用户的未支付订单数,但是每个订单数的过期时间是不同的。

在这种情况下,我们需要在业务中手动删除过期的字段,或者让它们自动过期。

2.1 为单独的 field 设置过期?

我们知道,Redis 里面暂时没有接口给 List、Set 或者 Hash 的 field 单独设置过期时间,只能给整个列表、集合或者 Hash 设置过期时间。

这样,当 List/Set/Hash 过期时,里面的所有 field 元素就全部过期了

但这样并不满足需求。

不念尝试在网上找一些已知方案,其中有一个 Stack Overflow 的问题帖子和我面临的很相似:

Redis如何为List/Set/Hash的元素设置单独的过期时间

接着,帖子下面的回答里无意看到了 Redis 作者的回答:

相关阅读

  • Python Flask之RESTful讲解与示例演示

    Python Flask之RESTful讲解与示例演示

    您可能不了解Python的教程内容,接下来一起来看看吧。 一、RESTful 概述 REST(Representational State Transfer)风格是一种面向资源的 Web 应用程序设计风格,它遵循一些设计原则,使得 Web 应用程序具

  • 公司网站如何制作设计 公司网页制作流程

    公司网站如何制作设计 公司网页制作流程

    为网友们解答公司网站如何制作设计和公司网页制作流程的IT知识,很不错的方法小知识,建议收藏哦! 公司网站对于大部分企业来说还是一定的用处的,不管是在互联网中充当一张企业名片

  • Nginx的负载均衡模式有哪几种

    Nginx的负载均衡模式有哪几种

    今天分享:Nginx的负载均衡模式有哪几种的相关经验,请看下面详细的介绍。 Nginx负载均衡是一种代理服务,它可以让客户端通过 Nginx 服务器来访问后端的目标服务器,从而实现负载均衡、缓

  • 做网页的网站有哪些 制作网页链接分享

    做网页的网站有哪些 制作网页链接分享

    关于做网页的网站有哪些和制作网页链接分享的相关介绍,继续往下看吧! 疫情期间电商业务量增长屡破记录,不少中小企业也首次建立官方网站及商店,借此吸引网上人流,本文将介绍5个受