首页 > 数据库 >Redis项目总结--缓存更新策略

Redis项目总结--缓存更新策略

时间:2022-12-08 19:44:24浏览次数:43  
标签:缓存 -- 数据库 Redis 更新 一致性 操作

Redis项目总结--缓存更新策略

1.更新策略

内存淘汰 超时剔除 主动更新
说明 不用自己维护,利用Redis内存淘汰机制,内存不足时自动淘汰部分数据,下次查询时更新缓存 给缓存数据添加过期时间,到期删除,下次查询时更新缓存 编写业务逻辑,在修改数据库的同时更新缓存
一致性 一般(取决于过期时间的长短)
维护成本

低一致性场景选内存淘汰,高一致性场景选主动更新,也可以和超时剔除结合使用

2.主动更新的三种方案(一般用方案一)

方案一:在更新数据库 的同时更新缓存。

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

  • 优点:保证了数据的一致性
  • 缺点:开发成本高

方案三:调用者只操作缓存,由其他线程异步将缓存数据持久化到数据库。

  • 优点:异步更新缓存数据,效率高。两次异步更新之间,对一个数据进行了多次修改,最终只有最后一次的更新有效,相当于将多次更新合并为一次。
  • 缺点:维护成本高,一致性和可靠性存在问题。数据变动后到下一次异步更新前数据不一致。若出现宕机则数据丢失。

3.主动更新方案一操作缓存和数据库的三个问题

(1)删缓存还是更新缓存(一般选删除缓存)

  • 更新缓存:每次更新数据库都更新缓存,无效写操作多
  • 删除缓存:更新数据库时让缓存失效,查询时再更新缓存

(2)如何保证缓存和数据库操作同时成功或失败

  • 单体系统:将缓存与数据库操作放到同一个事务
  • 分布式系统:利用TCC等分布式事务事务方案

(3)先操作缓存还是先操作数据库(会引发两种不同的线程安全问题)

  • 先删缓存再操作数据库
  • 先操作数据库再删缓存

4.缓存和数据库操作顺序引发的线程安全问题

(1)先删缓存再操作数据库

正常情况:

img1

异常情况:

img2

(2)先操作数据库再删缓存

正常情况:

img3

异常情况:

img4

标签:缓存,--,数据库,Redis,更新,一致性,操作
From: https://www.cnblogs.com/LoginX/p/Login_X61.html

相关文章

  • UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现
    【转】UML的9种图例解析-James·wang-博客园 https://www.cnblogs.com/firstcsharp/p/5327659.html 类与类图1)类(Class)封装了数据和行为,是面向对象的重要组......
  • 观影大数据分析(二)
    5数据分析5.1why想要探索影响票房的因素,从电影市场趋势,观众喜好类型,电影导演,发行时间,评分与关键词等维度着手,给从业者提供合适的建议。5.2what 5.2.1电影类型:定......
  • 在linux环境中安装node,npm,express
    linux安装node连接运程命令:进入usr/local文件夹cd/usr/local1.下载wgethttps://nodejs.org/dist/v14.17.6/node-v14.17.6-linux-x64.tar.xz2.解压tarxvf......
  • web框架、django基本使用
    今日内容总结web框架web框架的本质 理解1:连接前端与数据库的中间介质 理解2:socket服务端手写web框架 1.编写socket服务端代码 2.浏览器访问响应无效>>>:HTTP协......
  • ServletContext_获取以及获取MIME类型
    ServletContext_获取以及获取MIME类型1.获取:1.通过request对象获取request.getServletContext();2.通过HTTPServlet获取this.getServletConte......
  • CodeSandbox
    网站https://codesandbox.io/新建的时候有各种模版可以选择,也可以从GitHub导入项目,也可以把自己的项目作为模版方便下次直接fork默认会存放在﹝Mydrafts﹞中,也可以在﹝All......
  • Flink程序打包
    在基于FlinkDataStreamAPI进行流式数据处理应用时,我们可能希望将依赖和应用程序分别打包,如此便于发布和问题定位。在较新版本的Flink版本中推出了application模式,这种......
  • sphinx使用初体验笔记
    1#安装2pipinstallsphinx-ihttps://pypi.tuna.tsinghua.edu.cn/simple34#更换国内源5清华源6pipconfigsetglobal.index-urlhttps://pypi.tuna.......
  • xiaosir_python题
    1、给三个整数,求他们中的最大值。请用你熟悉的编程语言给出题解。n1=int(input('第1个数:'))n2=int(input('第2个数:'))n3=int(input('第3个数:'))max=0ifn1>n2......
  • 记一次Ubuntu系统修改自带Python软连接的错误
    操作系统;Ubuntu20.04刚装上系统,看了一下有Python,由于是Python3.10,所有想将Python3命令修改为Python命令,感觉更顺手,于是就把 /usr/bin/目录下的Python3软连接名称修改......