Redis-实战篇-缓存更新策略(内存淘汰、超时剔除、主动更新)

文章目录

1、缓存更新策略

1.1、内存淘汰

说明:不用自己维护,利用Redis的内存淘汰机制,当内存不足时自动淘汰部分数据。下次查询时更新缓存。
一致性:差
维护成本:无

1.2、超时剔除

说明:给缓存数据添加TTL(Time To Live)时间,到期后自动删除缓存。下次查询时更新缓存。
一致性:一般
维护成本:低

1.3、主动更新

编写业务逻辑,在修改数据库的同时,更新缓存
一致性:好
维护成本:高

2、业务场景:

  • 低一致性需求:使用内存淘汰机制。例如店铺类型的查询缓存
  • 高一致性需求:主动更新,并以超时剔除作为兜底方案。例如店铺详情查询的缓存

3、主动更新在企业中业务实现有三种方式

3.1、Cache Aside Pattern

企业用的最多
由缓存的调用者,在更新数据库的同时更新缓存

3.1.1、操作缓存和数据库时有三个问题需要考虑:

3.1.1.1、删除缓存还是更新缓存?
  • 更新缓存:每次更新数据库都更新缓存,无效写操作较多
  • 删除缓存:更新数据库时让缓存失效,查询时再更新缓存,一般会选择删除缓存的这个方案
3.1.1.2、如何保证缓存与数据库的操作的同时成功或失败?
  • 单体系统:将缓存与数据库操作放在一个事务
  • 分布式系统:利用TCC等分布式事务方案
3.1.1.3、先操作缓存还是先操作数据库?
  • 先删除缓存,再操作数据库
  • 先操作数据库,再删除缓存,胜出

3.2、Read/Write Through Pattern

缓存与数据库整合为一个服务,由服务来维护一致性。调用者调用该服务,无需关心缓存一致性问题。

3.3、Write Behind Caching Pattern

调用者只操作缓存,由其它线程异步的将缓存数据持久化到数据库,保证最终一致。

4、缓存更新策略的最佳实践方案:

  1. 低一致性需求:使用Redis自带的内存淘汰机制
  2. 高一致性需求:主动更新,并以超时剔除作为兜底方案

5、读操作

  • 缓存命中则直接返回
  • 缓存未命中则查询数据库,并写入缓存,设定超时时间

6、写操作:

  • 先写数据库,然后再删除缓存
  • 要确保数据库与缓存操作的原子性
相关推荐
送秋三十五36 分钟前
MySQL DBA需要掌握的 7 个问题
数据库·mysql·dba
睡觉的时候不会困39 分钟前
MySQL 高可用方案之 MHA 架构搭建与实践
数据库·mysql·架构
kyle~39 分钟前
Qt---对话框QDialog
数据库·qt·microsoft
GBASE1 小时前
“G”术时刻:南大通用GBase 8c数据库权限管理场景实践(三)
数据库
GottdesKrieges2 小时前
OceanBase系统日志管理
数据库·oracle·oceanbase
破烂儿2 小时前
基于机器学习的缓存准入策略研究
人工智能·机器学习·缓存
参.商.2 小时前
【Day21】146.LRU缓存 (Least Recently Used)
leetcode·缓存·golang
Dorcas_FE2 小时前
axios请求缓存与重复拦截:“相同请求未完成时,不发起新请求”
前端·spring·缓存
小嵌同学3 小时前
Linux:malloc背后的实现细节
大数据·linux·数据库