redis夯实之路-键过期与发布订阅详解

设置键的生存时间或过期时间

Setex(单位s),expire(s),pexpire(ms)可以设置键的生存时间,

Expirate,pexpirate设置键的过期时间(timestamp的时间戳)

Ttl和pttl返回键的剩余生存时间

RedisDb结构的expires字典保存了数据库的所有键的过期时间,称为过期字典。键是指向键对象的指针,值是longlong类型的整数,一个ms精度的unix时间戳

Persist可以移除键的过期时间

判断过期键

如果过期字典存在键,unix时间戳大于过期时间,键已经过期

过期键删除策略:定时删除,惰性删除,定期删除

1.定时删除:使用定时器,过期时间来临时进行删除。

2.惰性删除:获取键时检测是否过期,过期则删除。

3.定期删除:每隔一段时间随机抽取一些设置了过期时间的键,检测键是否过期,清理过期键。

Redis使用的是惰性删除,定期删除两种策略:获取键时检查是否过期,周期性检查。

Redis在键的过期时间到达之后并不会立即清除,过期键可能仍然存在一段时间,直到Redis检查到过期执行删除操作。如果需要确保即时删除过期键,可以使用DEL命令主动删除过期键。


也可以通过配置参数 maxmemory来限制Redis使用的内存大小,当内存达到限制时,Redis会根据所采用的内存淘汰策略来淘汰一些数据以释放内存空间。

发布与订阅

客户端使用subscribe订阅频道或模式

订阅关系保存在服务器状态的pubsub_channels字典里,字典的键为被订阅的频道,值为客服端的链表

订阅频道

使用subscribe订阅频道,服务器会将客服端和被订阅的频道在pubsub_channels字典中关联。如果频道没有任何订阅者,需要在pubsub_channels字典中新建一个该频道的键。客服端(订阅者)会被添加到值的链表的末尾。

退订频道

使用unsubscribe退订频道,在pubsub_channels字典中会在链表中删除退订的客户端。如果频道没有任何订阅者,需要删除该频道。

发送消息

使用publish向频道发送消息时,会将消息发送给频道的所有订阅者,然后将消息发送给所有和频道相匹配的模式的订阅者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/316449.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

专业课145+合肥工业大学833信号分析与处理考研经验合工大电子信息通信

今年专业课145也是考研科目中最满意的一门,其他基本相对平平,所以这里我总结一下自己的专业课合肥工业大学833信号分析与处理的复习经验。 我所用的教材是郑君里的《信号与系统》(第三版)和高西全、丁玉美的《数字信号处理》&…

操作系统-操作系统的特征(并发 共享 虚拟 异步 之间关系)

文章目录 总览操作系统的特征-并发操作系统的特征-共享并发和共享的关系操作系统的特征-虚拟操作系统的特征-异步小结 总览 操作系统的特征-并发 并行:同时做多个事件 并发:同一个时刻只有一个事件,但会切换事件,所以宏观上可能做…

面试题:说一说多线程常见锁的策略 ?

文章目录 前言一、乐观锁和悲观锁1.1 定义1.2 生动有趣滴例子1.3 版本号机制 二、读写锁2.1 读写锁的由来2.2 生动有趣de例子2.3 ReentrantReadWriteLock 类 三、重量级锁与轻量级锁3.1 定义3.2 生动活泼の例子3.3 自旋锁(Spin Lock) 四、公平锁与非公平…

监督、半监督、无监督、自监督学习方法之间的区别

概念辨别 监督学习(Supervised Learning):利用大量的标注数据来训练模型,模型最终学习到输入和输出标签之间的相关性;半监督学习(Semi-supervised Learning):利用少量有标签的数据和…

【Docker】在容器中管理数据数据卷挂载以及宿主机目录挂载

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是平顶山大师,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《【Docker】在容器中管理数据》。&#x1f3af…

基于网络爬虫的租房数据分析系统

python scrapy bootstrap jquery css javascript html 租房信息数据展示 租房地址数量分布 租房类型统计 租房价格统计分析 租房面积分析 房屋朝向分析 房屋户型平均价格统计分析 房屋楼层统计分析 房屋楼层与价格统计分析 房屋地址与价格统计分析 房屋相关信息词云展示 项目…

FreeRTOS 基础知识

这个基础知识也是非常重要的,那我们要学好 FreeRTOS,这些都是必不可少的。 那么就来看一下本节有哪些内容: 首先呢就是介绍一下什么是任务调度器。接着呢就是任务它拥有哪一些状态了。那这里的内容不多,但是呢都是非常重要的。 …

【数据结构与算法】单链表(无头单向非循环)

文章目录 1. 概念2. 链表分类3. 链表与顺序表对比4. 无头单向非循环链表实现(C语言)4.1 SingleLinkedList.h4.2 Test.c4.3 SingleLinkedList.c 1. 概念 链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指…

Linux Kernel 4.14--EOF

2017 年,Linux 内核长期支持版本(LTS)的支持时间从原来的2年增加到6年。2023年下半年举行的开源欧洲峰会,LTS 的支持时间取消来了6年,再次缩短到了 2 年。 首个获得6年支持的版就是是 4.14。 在六年支持之后&#xf…

macbook安装配置maven3.6.1(包含将jdk更新至11版本)

参考博客: https://blog.csdn.net/qq2019010390/article/details/125472286 下载和安装 首先,在maven官网下载macOS系统所需的压缩包 官网的地址:https://maven.apache.org/download.cgi 因为要下载的版本是3.6.1,所以要在历史…

C++力扣题目98--验证二叉搜索树

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 输入…

iOS xcode 15.1 打包报错

真机调试的时候没问题,打包的时候报错了 #报错 解决办法 pods.xcodeproj - build phases - compile sources - compiler flags pods.xcodeproj - Targets-support files pods-xx-frameworks

Python--装饰器

在 Python 中,装饰器是一种特殊类型的函数,它们用于修改或增强其他函数或方法的行为。装饰器本质上是一个函数,它接受一个函数作为参数,并返回一个新的函数。使用装饰器可以在不修改原函数代码的前提下,给函数添加新的…

计算机毕业设计-----SSH企业人力资源管理系统

项目介绍 企业人力资源管理系统,分为超级管理员与普通管理员两种角色,超级管理员可以对普通管理员进行添加、删除等操作; 超级管理员主要功能有: 部门管理、员工管理、招聘管理、培训管理、奖惩管理、薪资管理、用户信息修改、系统管理&…

【数据库基础】Mysql与Redis的区别

看到一篇不错的关于“Mysql与Redis的区别”的文章,转过来记录下~ 文章目录 一、数据库类型二、运行机制三、什么是缓存数据库呢?四、优缺点比较五、区别总结六、数据可以全部直接用Redis储存吗?参考资料 一、数据库类型 Redis:NOS…

【开源】基于JAVA+Vue+SpringBoot的桃花峪滑雪场租赁系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 游客服务2.2 雪场管理 三、数据库设计3.1 教练表3.2 教练聘请表3.3 押金规则表3.4 器材表3.5 滑雪场表3.7 售票表3.8 器材损坏表 四、系统展示五、核心代码5.1 查询教练5.2 教练聘请5.3 查询滑雪场5.4 滑雪场预定5.5 新…

基于JAVA的固始鹅块销售系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 鹅块类型模块2.3 固始鹅块模块2.4 鹅块订单模块2.5 评论管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 鹅块类型表3.2.2 鹅块表3.2.3 鹅块订单表3.2.4 鹅块评论表 四、系统展示五、核心代码5.…

计算机图形学作业:三维线段的图形变换

1. 将三维空间某线段 P1P2进行如下的操作,请按要求回答问题: (1) 沿 X 轴、Y 轴和 Z 轴分别平移 dx、dy 和 dz 的长度,给出相应的变换矩阵。 变换矩阵为: T100001000010dxdydz1 (2&#xff09…

VScode全局搜索屏蔽、显示屏蔽指定文件类型及文件夹

1.键盘上按快捷键“ crtl 逗号 ”启动设置界面 crtl ,设置界面显示如下: 2.搜索屏蔽 2.1.输入 search.exclude search.exclude 设置界面显示如下: 2.2. 点击下图红色箭头“Add Pattern”,添加想要屏蔽的文件类型或文件夹 **/*.git *…

【Mybatis系列】Mybatis空值关联

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…