Redis 逻辑过期策略设计思路

引言:

当我们平常使用Redis缓存的时候,会出现一种场景, redis的key到过期时间了,总是需要到数据库里面去查一遍数据再set回redis,这个时候如果数据库响应比较慢,那么就会造成用户等待,如果刚好并发比较大,则有可能给数据库造成巨大的压力,甚至导致服务不可用。

特别是在MPP分析库的场景尤为突出。

但是我们Redis又不能设置为永不过期,因为这样就获取不到最新的数据了。

那么,有什么办法能不穿透数据库,但是又能在redis中一直取到最新的数据呢? Redis 逻辑过期策略诞生

Redis 逻辑过期策略是什么?

就是通过LogicalExpiredTime 和 PhysicalExpiredTime 来让相对新的热点数据相对长期的存在于Redis中。

实现原理

SET请求

当客户端发起SET请求的时候,会封装成一个RV对象,对象里面包含 Timestamp 和 Value 两个属性。

Timestamp 存储当前set时候的时间戳,Value 存储真正的数据

图1-set请求

GET请求

当客户端发起GET请求的时候,首先判断Value是否有值。如果没有,说明物理过期时间已经过期了,这个时候执行LoadValue函数,一般是从数据库里面加载数据,然后再调用Set请求,将数据set进Redis,并将数据返回给Client。

如果有值的话,会取Timestamp的值和逻辑过期时间做对比,不管对比结果如何,都将当前value返回给客户端。

如果 Timestamp/1000 + LogicExpiredTime >= Now 则表名逻辑时间已经过期,则开启异步LoadValue并SET。
图2-get请求

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue-Router 路由(常量路由)

1、安装 pnpm i vue-router 2、新建文件:src/routes.ts import { RouteRecordRaw } from vue-routerexport const constantRoute: RouteRecordRaw[] [{//path: /,redirect: /login,},{//path: /login,component: () > import(/views/Login/index.vue),name…

Jenkins构建实用场景指南

1 总体说明 本文主要介绍在研发实战时,通过Jenkins解决企业级软件构建打包一些实用场景。通常是在打包构建前,通过命令和工具进行预处理,避免修改源码,可按需配置构建任务,自动持续集成。 2 Jenkins简介 2.1 复制任务 研发实战创建构建任务,推荐从已有的构建任务进行…

解释一下“暂存区”的概念,在Git中它扮演什么角色?

文章目录 暂存区在Git中的概念与作用什么是暂存区(Staging Area)暂存区的位置和结构 暂存区在Git工作流程中的角色1. 分离工作区与版本库的交互示例代码与操作步骤示例1:将工作区的修改添加至暂存区 2. 控制提交内容的粒度示例2:分…

llama2 与 llama3比较

Llama 3 刚刚在4月18号推出,距 Llama 2 发布正好 9 个月。它已经可以在 Meta 网站上进行聊天,可以从 Huggingface 以 safetensors 或 GGUF 格式下载。 llama 2 与 llama3 比较 1. 模型输出(model output) llama 2 输出只能是文本…

MySQL下载与安装

文章目录 1:MySQL下载与安装2:配置环境变量3:验证是否安装成功 1:MySQL下载与安装 打开MySQL官网,MySQL 下载链接选择合适的版本和操作系统,页面跳转之后选择No thanks, just start my download.等待下载即…

JAVAEE——IP协议

文章目录 IP协议IP协议报头格式IP协议报头的各个区段四位版本四位首部长度八位服务类型16位总长度16位标识,3位标志,13位片偏移八位生存时间八位协议 地址管理IP地址解决提议1:动态分配Ip地址解决提议2:NAT机制 IP协议 IP协议报头…

Qt实现XYModem协议(五)

1 概述 XMODEM协议是一种使用拨号调制解调器的个人计算机通信中广泛使用的异步文件运输协议。这种协议以128字节块的形式传输数据,并且每个块都使用一个校验和过程来进行错误检测。使用循环冗余校验的与XMODEM相应的一种协议称为XMODEM-CRC。还有一种是XMODEM-1K&am…

在线拍卖系统,基于SpringBoot+Vue+MySql开发的在线拍卖系统设计和实现

目录 一. 系统介绍 二. 功能模块 2.1. 管理员功能模块 2.2. 用户功能模块 2.3. 前台首页功能模块 2.4. 部分代码实现 一. 系统介绍 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系…

【C++简史】

文章目录 简介C 语言的诞生C语言编程原理面向对象编程C和泛型编程C 的起源 简介 C融合了 3 种不同的编程方式: C 语言代表的过程性语言、C 在 C 语言基础上添加的类代表的面向对象(OOP)语言、 C 模板支持的泛型编程。 C 语言的诞生 贝尔实验室的 Dennis Ritchie(…

项目小游戏-贪吃蛇

目录 1.游戏开始 - GameStart 1.1cmd命令窗口 调节窗口命令 ​编辑更改窗口命名 ​编辑 1.2 Win32 API win32 API 的介绍: ​编辑 获取控制台坐标COORD 获取控制台句柄: 获取缓冲台光标信息: 获取虚拟键位: 本地初始化 setlocale(); 游戏开始的具体实现&#xff1a…

Java发送邮件 启用SSL

使用的maven依赖: <dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.4.7</version> </dependency> 配置文件mail.properties如下: # 邮箱配置 email.username=your-email@exa…

[USACO1.5] 八皇后 Checker Challenge

题目描述 检查一个如下的6 x 6的跳棋棋盘&#xff0c;有六个棋子被放置在棋盘上&#xff0c;使得每行&#xff0c;每列&#xff0c;每条对角线(包括两条主对角线的所有对角线)上都至多有一个棋子&#xff0c;如下例&#xff0c;就是一种正确的布局。 上面的布局可以用序列2 4…