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

文章目录

  • 1、缓存更新策略
    • 1.1、内存淘汰
    • 1.2、超时剔除
    • 1.3、主动更新
  • 2、业务场景:
  • 3、主动更新在企业中业务实现有三种方式
    • 3.1、Cache Aside Pattern
      • 3.1.1、操作缓存和数据库时有三个问题需要考虑:
        • 3.1.1.1、删除缓存还是更新缓存?
        • 3.1.1.2、如何保证缓存与数据库的操作的同时成功或失败?
        • 3.1.1.3、先操作缓存还是先操作数据库?
    • 3.2、Read/Write Through Pattern
    • 3.3、Write Behind Caching Pattern
  • 4、缓存更新策略的最佳实践方案:
  • 5、读操作
  • 6、写操作:

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、写操作:

  • 先写数据库,然后再删除缓存
  • 要确保数据库与缓存操作的原子性

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

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

相关文章

数据同步软件有哪些

数据同步软件有哪些呢?随着企业规模的扩大,企业数据也积累得越来越多,万一发生宕机风险,那么这个损失将不可估量。所以为了容灾备用,我们往往需要将数据同步到另一台备胎服务器上,进行冗余。 那么需要同步的…

centos7.9 python3环境(virtualenv)搭建及所遇错误

人望山,鱼窥荷,真正喜欢想要的,没有一样可以轻易得到。 目录 # 1. 解决版本冲突问题--建议不要跳过(一定要查看软链接是否链接正确) # 2. python3(virtualenv)环境搭建 # 3. virtualenv常用命令 # 4. 所遇错误解析 ## 4.1 遇到 No modul…

惠海 H6246低功耗DC/DC降压型恒压芯片60V降3.3V5V12V 蓝牙模块 单片机供电

1.产品描述 H6246是一种内置60V耐压MOS,支持输入高达48V的高压降压开关控制器,可以向负载提供0.3A的连续电流。H6246支持输出恒定电压,可以通过调节VFB采样电阻来设置输出电压,同时支持最大电流限制,可以通过修改CS采…

操作系统期末复习考题二

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、前言🚀🚀🚀二、正文☀️☀️☀️三、总结🍓🍓🍓 一、前言🚀🚀&am…

【资源调度】1-何为调度?

导读:本期是全网最全【资源调度】系列推文的第1期(共50期左右)。我们将对调度的定义与作用、计划与调度的关系、调度问题的拆解做出详细介绍,使大家对【资源调度】问题有了一个整体的认识,为后续的内容奠定基础。 作者1:张哲铭&am…

个人搭建cppreference网站

近日,由于购买的腾讯云服务器要过期了,之前在服务器搭建的cppreference也要重新搭建,故写下此文章 cppreference的访问速度也慢,故自己WSL子系统简单搭键一下是个不错的选择 环境准备 首先,自己先安装Nginx,在网上找安装教程即可下载cppreference网站资源包:https://pan.baidu…

ubuntu 软链接(ubuntu20.04)

ubuntu 软链接(ubuntu20.04) 在Ubuntu和其他Linux系统中,软链接(也称为符号链接)是文件系统中的一个特殊类型的文件,它作为一个引用或指针,指向另一个文件或目录。软链接类似于Windows中的快捷…

java-快速排序 4

总结 快速排序是一种高 java (String[] args) { int[] array {10, 7, 8, 9, 1, 5, 7, 8}; // 基本快速排序 int[] basicArray array.clone(); basicQuickSort(basicArray, 0, basicArray.length - 1); System.out.println("Basic…

unity ScrollRect裁剪ParticleSystem粒子

搜了下大概有这几种方法 通过模板缓存通过shader裁剪区域:案例一,案例二,案例三,三个案例都是类似的方法,需要在c#传入数据到shader通过插件 某乎上的模板缓存方法link,(没有登录看不到全文&a…

混沌工程介绍

概念 混沌工程是通过实验探究系统稳定性的实践过程,其作战武器是风险因子,即在系统中引入风险变量来验证系统对风险的抵抗能力,它的作用是推动系统容错能力建设、验证监控告警及时性、提升研发问题排查能力。 混沌工程的工作内容 推动基础…

RFID固定资产管理系统在企业中的应用与优势

随着企业资产规模的不断扩大和管理复杂性的增加,传统的资产管理方式已无法满足企业高效管理的需求。RFID固定资产管理系统凭借其高效、准确、实时的特点,成为企业固定资产管理的新宠。 一、什么是RFID固定资产管理系统 RFID(无线射频识别&…

磁盘分区工具(fdisk 和 parted)区别及操作笔记

fdisk 和 parted 都是 Linux 系统中用于磁盘分区的工具。 两者主要区别: 支持的分区表类型: fdisk 主要支持 MBR分区表,MBR分区表支持的硬盘单个分区最大容量为2TB,最多可以有4个主分区。parted 支持 MBR分区表 和 GPT分区表&…

使用AI工具 Baidu Comate 辅助编码 快速定位修改Bug

一、Baidu Comate 概述 Baidu Comate(百度智能编码助手)是一款基于文心大模型的新一代编码辅助工具。它结合了百度多年积累的编程现场大数据和外部优秀开源数据,旨在为用户提供高质量的编程代码生成和优化服务。Comate的主要目标是提升编码效…

人力资源敏捷管理

SБ_Итоговая аттестация_Управление человеческими ресурсами и их развитием в совр. организаци 你好,Вэйдун。当你提交此表单后,拥有者将会看到你的姓名和电子…

帮助某服务业公司制定发展战略与未来规划

在集团公司高速发展、业务范围不断扩大时,组织往往对公司未来的发展方向感到迷茫,不知道如何进行更好的规划,找到合适的发展战略,为企业提供更长远的发展空间,带来更多是利益。面对这个问题,华恒智信认为企…

【Hive SQL】时间戳格式化、时间字符串转换格式化、时区切换(Mysql\Hive SQL\Athena)

文章目录 一、日期格式化1、时间戳格式化2、日期字符串格式化3、时区切换4、时区列表 一、日期格式化 本文主要记录 [Mysql\ Hive SQL\ Athena] 时间戳转换、日期格式化、时区转换各种数据数据操作 1、时间戳格式化 1、毫秒值转 yyyy-MM-dd HH:mm:ss Mysql select FROM_UN…

AXI接口简介

AXI接口,全称为Advanced eXtensible Interface,是ARM公司推出的一种高性能、低成本、可扩展的高速总线接口。AXI接口是ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture)高级微控制器总线架构的一部分。2003年发布了…

股票回购(Share Repurchase)是什么?中英双语介绍

股票回购 中文版 股票回购是指一家金融公司使用其现金储备从公开市场上回购自身股票的行为。这一操作通常有以下几个原因: 提升股价:当公司认为其股票被市场低估时,通过减少市场上的流通股数量,可以提升每股的市场价值。优化资…

RK3568平台(USB篇)UVC驱动分析

一.UVC简介 摄像头分为两类: 1.CAMER接口的摄像头; 2.USB接口接口的摄像头; 这里主要介绍usb摄像头的设备驱动程序。 UVC全称为USB Video Class,即:USB视频类,是一种为USB视频捕获设备定义的协议标准。…

详解ApplicationRunner和CommandLineRunner

一、前言 springBoot框架项目,有时候有预加载数据需求——提前加载到缓存中或类的属性中,并且希望执行操作的时间是在容器启动末尾时间执行操作。比如笔者工作中遇到了一个预加载redis中的缓存数据,加载为java对象。针对这种场景&#xff0c…