如何为Redis中list中的项设置过期时间

2023-05-16

  • 问题
  • 两种解决方法
    • 有序集合
    • 多个集合以及TTL

Redis是一个伟大的工具,用来在内存中存储列表是很合适的。

不过,如果你想要快速搜索列表,同时需要让列表中每项都在一定时间后过期,应该怎么做呢?

首先,当然不能使用不同的类似的key存储数据,然后使用keys命令来获取所有类似key的数据。这样的开销是不可接受的。

Redis并没有直接提供方法做这件事,但是这是可以做到的!虽然最后用的未必是Redis的List数据结构。

我接下来会展示给你看。

问题

最近,我遇到一个问题,我有一个数据列表,需要用它来制作折线图,我准备使用API返回这个数据列表,然后在前端绘图。

这个数据列表本身是挺大的,然后它还会一直更新,所以放在数据库是不合适的,我计算过从数据库取回需要10s。所以我决定使用redis。

碰到一个问题,就是数据列表中的数据,如果超过一定时间的话我是不需要了,否则这个列表会变得无比巨大。所以我需要redis对列表中的每个项都设置过期时间。

然后我在网上找到这篇文章,它描述了两种办法。

在讲解这两种办法之前,你需要明白redis的两个数据结构:

  • Redis的集合:“无序的字符串集合”,它的项有下面的特点
    • 唯一的(如果加入重复的数据,redis会默默的拒绝)
    • 无序,并且不可以用任何方法(在redis中)排序
  • Redis有序集合:“有序的字符串集合“,它的项有下面的特点:
    • 和集合一样,每个项都是唯一的
    • 拥有积分(项的积分并不必须是唯一的)
    • 根据积分排序(有索引)

这两个集合,都不可以对其中的项设置过期时间。当然,你可以对整个集合设置过期时间。

两种解决方法

有序集合

查询有序集合是非常快的,因为redis将一个列表转换成了集合,所以当我们访问它的时候,它已经是排好序的了。

根据Redis文档的描述:

“Sorted sets are implemented via a dual-ported data structure containing both a skip list and a hash table, so every time we add an element Redis performs an O(log(N)) operation. That’s good, but when we ask for sorted elements Redis does not have to do any work at all, it’s already all sorted”

当然,你不可以对有序集合中每个项设置TTL。

你可以通过score对有序集合进行查询,我们可以利用这个地方来形成一个解决方案:

对于加入到有序集合的每个项,我们都将它的score设置为Unix Timestamp,这个timestamp代表它的过期时间。然后,我们加入一个定时任务,定时移除那些过期的数据

多个集合以及TTL

这个方案使用普通的集合。

因为不能对集合中每项都设置TTL,但是可以对整个集合设置TTL。所以,我们可以将每个时间段的数据放在一个集合中。然后对这个集合设置过期时间。

转载于:https://www.cnblogs.com/thomaszdxsn/p/ru-he-weiRedis-zhonglist-zhong-de-xiang-she-zhi-gu.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为Redis中list中的项设置过期时间 的相关文章

随机推荐

  • session和cookie的区别

    1 xff0c session 在服务器端 xff0c cookie 在客户端 xff08 浏览器 xff09 2 xff0c session 默认被存在在服务器的一个文件里 xff08 不是内存 xff09 3 xff0c session
  • Spring常用配置

    上篇文章我们简单介绍了Spring的基本配置 xff0c 算是一个简单的入门 xff0c 这篇文章我们再一起来看看Spring在使用的过程中一些其他的常见配置 Bean的Scope Spring中的Scope注解主要是为了解决Bean的实例
  • iOS开发网络篇 —— OC加载HTML代码

    html代码 图1 样式一 xff1a 34 lt p gt lt img src 61 34 upload image 20170609 1496978712941664 jpg 34 title 61 34 14969787129416
  • Python 安装与环境变量配置

    一 软件下载 Python安装包下载地址 xff1a https www python org 二 安装过程 xff08 略 xff09 三 环境变量配置 xff1a 方法一 xff1a 使用cmd命令添加path环境变量 在cmd下输入
  • USB串口导致鼠标乱跳

    近期在工控机上安装USB串口 xff0c 结果装上没几天 xff0c 就有反馈开机后鼠标乱跳 然后 xff0c 开始解决问题 环境 xff1a 工控机操作系统Windows 7专业版 xff0c USB串口Z TEK USB RS232 1
  • Minimum Depth of Binary Tree 二叉树的最小深度

    Given a binary tree find its minimum depth The minimum depth is the number of nodes along the shortest path from the roo
  • 【Android Studio】成功解决 “gradle project sync failed”

    更新Android Studio后报错 xff1a gradle project sync failed Basic functionality e g editing debugging will not work properly 网上
  • 我失败的程序员生涯

    我 xff0c 一个普普通通的人 普通本科毕业 xff0c 来到北京成为了一个普通的程序员 2013年 xff0c 我本科毕业 xff0c 然后就踏上了北漂的征程 来之前想的很清楚 北京技术发达先进 我可以在这里工作三四年 xff0c 学习
  • gdb+gdbserver远程串行协议[zz]

    转载地址 xff1a http blog sina com cn s blog 71ed04f70100qhxc html gdbserver debug remote debug mount hello Usage gdbserver O
  • python 远程关机_python实现微信远程电脑关机完整源码

    这是python实现微信远程电脑关机完整源码下载 xff0c 通过手机微信发送QQ邮件给sina邮箱 xff0c 然后利用python的pop3定时检查sina邮箱的邮件主题以及邮件来源 xff0c 并在电脑执行相应的命令行实现关机 软件介
  • html设计思路,网页设计思路7个方法

    网页设计思路7个方法 网页设计除了要设计的漂亮 xff0c 体验优秀 xff0c 还要让用户对网站难以忘怀 xff0c 这就需要设计师进行深入的思考 xff0c 通过更加走心的设计 xff0c 来抓住用户的心 毕竟没有哪个站长不想让自己的网
  • 安卓网络类型设置的实现

    工作背景 xff1a 公司出口国外某国的设备 xff0c 因为该国对4G认证要求较高 xff0c 流程非常麻烦 xff0c 客户不想取得4G方面认证 xff0c 因此订单机器设备需禁用4G xff0c 且不能手动恢复4G xff0c 默认3
  • 硬件虚拟化

    硬件虚拟化也称作完全虚拟化 在计算机科学中 xff0c 硬件虚拟化 xff08 英语 xff1a Hardware virtualization xff09 是一种对计算机或操作系统的虚拟 虚拟化对用户隐藏了真实的计算机硬件 xff0c 表
  • 计算机语言怎么学才学得好,如何正确开始学习计算机编程语言?

    原标题 xff1a 如何正确开始学习计算机编程语言 xff1f 俗话说 xff0c 好的的开始是成功的一半 学习编程语言任重而道远 xff0c 如何准备学习是一个很关键的问题 今天小助手给大家分享如何开始学习编程语言的建议 xff0c 希望
  • html中如何传递数组,如何将数组从select html元素组件传递到数组中具有不同值的两个文本组件...

    我正在尝试在选择值之后从select元素中获取价格值 例如股票描述 数字发票QT 售价 100 但是我已经写了下面的代码 当我运行它时 我会得到这个错误 销售价格返回 未定义 所以我非常感谢你能帮我 因为我整天都在上网寻找帮助 import
  • Codeforces Round #589 div.2 C,D

    感觉这一场的复杂度非常的玄学 也可能是我偷懒太长时间变菜了QAQ C 题意 给出 x n 求x质因子的从1到n的g i p 的连乘思路 求出x的每个质因子 直接连乘到n计算即可 code include lt bits stdc 43 43
  • 微信支付报调用支付JSAPI缺少参数: sign

    检查后台返回参数中没有paySign字段 转载于 https www cnblogs com muou2125 p 11604456 html
  • Windows下使用命令打开远程桌面

    如果在Windows系统下找不到 远程桌面 入口 xff0c 可以使用命令方式打开 方法如下 xff1a 在命令提示符中输入如下命令 xff1a start mstsc exe 如果感觉每次都输入命令太麻烦 xff0c 可以新建一个bat批
  • 设置input 中placeholder的样式

    webkit input placeholder Chrome Opera Safari position relative top 4px moz placeholder Firefox 19 43 position relative t
  • 如何为Redis中list中的项设置过期时间

    问题 两种解决方法 有序集合 多个集合以及TTL Redis是一个伟大的工具 xff0c 用来在内存中存储列表是很合适的 不过 xff0c 如果你想要快速搜索列表 xff0c 同时需要让列表中每项都在一定时间后过期 xff0c 应该怎么做呢