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 的操作,并不是原子的,它们的执行时长也不是可控制的。当两个请求的时序发生了错乱,就会发生缓存不一致的情况。

    推荐阅读