当前位置:网站首页>缓存层与数据库层数据同步问题
缓存层与数据库层数据同步问题
2022-08-09 14:59:00 【Small-K】
缓存层与数据库层数据同步问题
在实际的业务开发中,为了避免大量请求直接操作数据库,我们会用redis做一个缓存层,用户的数据库请求先在redis中查询,查找的到就返回,查找不到再从数据库取数据更新缓存,然后返回。
这就涉及到了缓存层与数据库层之间如何保持数据一致的问题。
一、旁路缓存方案
写操作时,先修改数据库,再删除相关缓存。
之所以要删除缓存而不是更新,主要是基于:
有些缓存更新涉及多个表之间的复杂操作,频繁进行会消耗性能。不删缓存,每次更新数据库都要计算一次,而删除缓存后,缓存的计算只会在下一次请求到来时才会进行。
这个方案的缺点是当删除缓存失败时,客户会读到旧数据,直到下一次数据更新
二、双写一致方案
先删除缓存,再更新数据库
先将缓存删掉,就避免了用户读到旧数据
这个方案的缺点是:如果数据库更新失败,用户读到的仍然是旧数据,但不会出现不一致;如果在数据库更新完成之前来了请求,缓存仍然会加载到旧数据,产生不一致
三、延时双删方案
先删除缓存,再更新数据库, 更新成功后异步再删一次缓存
这样保证了数据库更新成功后,缓存中的数据在一定时间后一定是更新后的数据。
缺点是:数据更新成功到第二次缓存删除成功之间的较短时间内,用户可能读到旧数据。
总结
三种方案都不能称作完美,具体使用时按需选用,对数据一致要求较高,就选择延时双删;对数据一致性要求不高且并发量不高,就选择双写一致或旁路缓存。
当然, 如果要追求完美的数据一致性,就必须使用串行请求,但这会大幅度削减网络吞吐量。
边栏推荐
- Hold face (hugging face) tutorial - Chinese translation - create a custom framework
- Data Fitting Methods Application of MATLAB in Mathematical Modeling (Second Edition)
- STL标准模板库
- 交叉编译 Crypto++
- Correlation analysis
- Analytic Hierarchy Process (AHP) - Applications of MATLAB in Mathematical Modeling (2nd Edition)
- hugging face tutorial - Chinese translation - fine-tuning a pre-trained model
- 【工具使用】Modscan32软件使用详解
- 堆(heap)系列_0x02:堆的前世今生(WinDbg+Visual Studio汇编)
- 堆(heap)系列_0x08:NT堆调试支持_立刻发现调试支持(DPH)
猜你喜欢

hugging face tutorial - Chinese translation - model summary
![[Paper reading] LIME: Low-light Image Enhancement via Illumination Map Estimation (the most complete notes)](/img/ca/6c8939fd752cc8928c2ffce0b090ed.png)
[Paper reading] LIME: Low-light Image Enhancement via Illumination Map Estimation (the most complete notes)

蓝桥杯嵌入式第十三届模拟题做题笔记

【Postgraduate Work Weekly】(Week 9)

Stetman读peper小记:Defense-Resistant Backdoor Attacks Against DeepNeural Networks in Outsourced Cloud

数学规划模型

Correlation analysis

Vim实用技巧_6.复制和粘贴原理(寄存器)

软件安全内存区域详解

go语言基础学习(一起学习go语言)
随机推荐
【工具使用】Modbus Slave软件使用详解
深入浅出最优化(7) 罚函数法
类定义中class和className中间的修饰词的作用有关问题
TOPSIS优劣解距离法
堆(heap)系列_0x03:堆块 + malloc/new底层 + LFH(WinDbg分析)
【力扣】75. 颜色分类
Vim实用技巧_3.可视模式和命令模式
【原理+源码详细解读】从Transformer到ViT
堆(heap)系列_0x04:堆的内部结构(_HEAP=_HEAP_SEGMENT+_HEAP_ENTRY)
Postgraduate Work Weekly (Week 4)
hugging face tutorial - Chinese translation - share a model
使用NATS及其nats.c客户端简单示例用法(nats.c的API接口)
NiN(Network in Network) pytorch实现
堆(heap)系列_0x05:一张图剖析堆块分配和FreeLists的联系
Faster R-CNN 论文总结
ConvNext笔记
【力扣】114. 二叉树展开为链表
深入浅出最优化(4) 拟牛顿法
软件安全内存区域详解
流体拓扑优化问题