在大型并发的后端服务系统中,处理瓶颈的往往是mysql的查询写入等数据库。
为了快速响应用户的请求,系统优化当然需要利用缓存来加快速度。 常用的是性能非常高的缓存数据库,如redis。 redis与mysql配合使用,匹配得非常完美。
但是没有免费的午饭。 要使用缓存,必须面对缓存和数据库不一致的问题。 要解决这种不一致性,有一个通用的设计模式。 实际上,它不仅仅是数据库上的APP应用程序。 陈皓这篇文章说得比较全面。
以下为原文,入侵删除:
看到许多人编写代码来更新缓存数据,删除缓存,然后更新数据库,在随后的读取操作中重新加载数据。 但是,这在逻辑上是错误的。 请考虑两个同时操作。 一个是更新操作,另一个是查询操作。 更新操作删除缓存后,查询操作不会命中缓存。 首先读取旧数据并将其放入缓存中,然后通过更新操作更新了数据库。 然后,缓存中的数据仍然是旧数据,而缓存中的数据是脏的。 然后,就这样变脏。
我不知道为什么这么多人用这个逻辑,但是在给微博发了这个贴之后,我发现很多人给出了很多非常复杂奇怪的方案。 因此,我想写这篇文章说几个高速缓存更新的设计模式。
在这里,我们不讨论两种事情是事务性的还是可能失败的:缓存更新和数据更新。 首先,假设数据库更新和缓存更新成功(首先将成功的代码逻辑写入正确的内容)。
用于更新缓存的设计模式有四种:缓存辅助、读取跟踪、写入跟踪和写入绑定缓存。 让我们来看看这四种类型的Pattern。
文/上海蓝盟 IT外包专家