Redis 逻辑过期策略设计思路

引言:

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

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

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

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

Redis 逻辑过期策略是什么?

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

实现原理

SET请求

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

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

GET请求

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

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

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

相关推荐
eggwyw40 分钟前
完美解决phpstudy安装后mysql无法启动
数据库·mysql
LaughingZhu1 小时前
Product Hunt 每日热榜 | 2026-03-23
数据库·人工智能·经验分享·神经网络·chatgpt
2401_894241921 小时前
用Pygame开发你的第一个小游戏
jvm·数据库·python
java修仙传1 小时前
MySQL 事务隔离级别详解
数据库·mysql·oracle
Irissgwe1 小时前
MySQL存储过程和触发器专题
数据库·mysql·oracle
椎4951 小时前
Redis day02-应用-实战-黑马点评-短信登录
数据库·redis·spring
瀚高PG实验室2 小时前
易智瑞GeoScene Pro连接瀚高安全版数据库 458
数据库·安全·瀚高数据库
551只玄猫2 小时前
【数据库原理 实验报告3】索引的创建以及数据更新
数据库·sql·课程设计·实验报告·操作系统原理
加农炮手Jinx2 小时前
Flutter for OpenHarmony:postgrest 直接访问 PostgreSQL 数据库的 RESTful 客户端(Supabase 核心驱动) 深度解析与鸿蒙适配指南
数据库·flutter·华为·postgresql·restful·harmonyos·鸿蒙