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。

相关推荐
RestCloud4 小时前
揭秘 CDC 技术:让数据库同步快人一步
数据库·api
得物技术7 小时前
MySQL单表为何别超2000万行?揭秘B+树与16KB页的生死博弈|得物技术
数据库·后端·mysql
christine-rr11 小时前
linux常用命令(4)——压缩命令
linux·服务器·redis
可涵不会debug11 小时前
【IoTDB】时序数据库选型指南:工业大数据场景下的技术突围
数据库·时序数据库
ByteBlossom11 小时前
MySQL 面试场景题之如何处理 BLOB 和CLOB 数据类型?
数据库·mysql·面试
麦兜*11 小时前
MongoDB Atlas 云数据库实战:从零搭建全球多节点集群
java·数据库·spring boot·mongodb·spring·spring cloud
Slaughter信仰11 小时前
深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)第十章知识点问答(10题)
java·jvm·数据库
麦兜*11 小时前
MongoDB 在物联网(IoT)中的应用:海量时序数据处理方案
java·数据库·spring boot·物联网·mongodb·spring
-Xie-12 小时前
Mysql杂志(十六)——缓存池
数据库·mysql·缓存