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。

相关推荐
睡不醒男孩03082325 分钟前
第七篇:揭秘 PostgreSQL 数据库内核级管控:CLup 深度架构设计与高可用底座技术白皮书
数据库·postgresql·clup
cmes_love1 小时前
Level 2逐笔成交历史数据下载方法笔记
数据库·笔记·oracle
swordbob1 小时前
MySQL字符集陷阱:从Oracle迁移踩坑到utf8mb4强制规范
数据库·sql
牛油果子哥q2 小时前
【C++ STL string 】C++ STL string 终极精讲:底层原理、内存机制、全套API、深浅拷贝、易错坑点与工程实战规范
数据库·c++
十五年专注C++开发2 小时前
MySql中各种功能用sql语句实现总结
数据库·sql·mysql
数据库小学妹2 小时前
AI时代数据库怎么选?多模融合、数据统一存储与选型实战指南
数据库·人工智能·经验分享·ai
Albert Edison2 小时前
【Redis】Centos7.9 安装 Redis 5 教程
数据库·redis·缓存
云计算磊哥@2 小时前
运维开发宝典026-MySQL02数据库表操作
运维·数据库·运维开发
Steadfast_GG3 小时前
Redis中的通用命令
redis·缓存
小二·3 小时前
Redis 内存溢出(OOM)排查与恢复实战
数据库·redis·bootstrap