Next.js+React+Node系统实战,搞定SSR服务器渲染无mi
download:Next.js+React+Node系统实战,搞定SSR服务器渲染
备链:https://www.97yrbl.com/t-1391.html
问题
你只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题?
分析
先做一个说明,从理论上来说,有两种处理思维
,一种需保证数据强一致性,这样性能肯定大打折扣;另外我们可以采用最终一致性,保证性能的基础上,允许一定时间内的数据不一致,但最终数据是一致的。
一致性问题是如何产生的?
对于读取过程:
首先,读缓存;
如果缓存里没有值,那就读取数据库的值;
同时把这个值写进缓存中。
双更新模式:操作不合理,导致数据一致性问题
我们来看下常见的一个错误编码方式:
public void putValue(key,value){
// 保存到redis
putToRedis(key,value);
// 保存到MySQL
putToDB(key,value);
//操作失败了
}
比如我要更新一个值,首先刷了缓存,然后把数据库也更新了。但过程中,更新数据库可能会失败,发生了回滚。所以,最后“缓存里的数据”和“数据库的数据”就不一样了,也就是出现了数据一致性问题。
你或许会说:我先更新数据库,再更新缓存不就行了?
public void putValue(key,value){
// 保存到MySQL
putToDB(key,value);
// 保存到redis
putToRedis(key,value);
}
这依然会有问题。
【Next.js+React+Node系统实战,搞定SSR服务器渲染无mi】考虑到下面的场景:
操作 A 更新 a 的值为 1,操作 B 更新 a 的值为 2
。由于数据库和 Redis 的操作,并不是原子的,它们的执行时长也不是可控制的。当两个请求的时序发生了错乱,就会发生缓存不一致的情况。推荐阅读
- c#|VS册程序设计C#---问卷调查系统
- c#课设|c#单机考试系统
- python|Win10操作系统(PyTorch虚拟环境配置+PyCharm配置)
- C++实现教职工信息管理系统课程设计
- 实战 | 使用 Kotlin Flow 构建数据流 "管道"
- 当华为云会议邂逅鸿蒙系统,全场景智慧办公画卷初显
- 【OpenHarmony移植案例与原理】XTS子系统之应用兼容性测试用例开发
- java后台管理系统|java后台管理系统_基于 java的spring boot 和Vue ElementUI的在线考试后台管理系统
- demo|基于spring、mvc和easy UI的驾校后台管理系统
- 大数据项目总结|基于Java+springmvc+vue 健康管理系统