同城交友源码,对缓存和数据库一致性还有疑问吗

2023-06-29 15:56:55   来源:哔哩哔哩


(资料图片)

无论是缓存还是数据库,对同城交友源码而言都是必不可少的存在,但由于缓存和数据库中都需要存储数据,于是缓存和数据库一致性问题便被提出来了,并且还成为了一个老生常谈的话题,在同城交友源码中,该如何解决该问题呢?

如果在同城交友源码中通过启动定时任务的方式来将数据库中的数据更新到缓存中,是会引发数据不一致问题的,所以使用定时任务的方式并不可取;如果同时更新缓存和数据库中的数据,无论是先更新缓存还是先更新数据库都会存在并发引起的一致性问题。

所以“无脑”更新并不适用于同城交友源码,为了保证缓存的利用率和缓存与数据库一致性,我们可以引入删除缓存方案,那可实现的数据更新方案则可以分为两种:

第一种是先删除缓存,后更新数据库;第二种是先更新数据库,后删除缓存。无论是第一种还是第二种数据更新方案,第二步失败仍会导致数据不一致问题。

对于第一种方案,在并发场景下,如果读写同时发生,仍可能存在数据不一致的情况。但第二种读写同时发生后数据不一致情况出现的概率非常低,所以在同城交友源码中可以利用“先更新数据库,后删除缓存”的方式来保证缓存和数据库的一致性。

为避免“先更新数据库,后删除缓存”方案中第二步失败所引发的数据不一致问题,在同城交友源码开发时,可以采取两种解决措施,第一种是利用消息队列实现异步重试,第二种是订阅数据库变更日志,再操作缓存。

由于消息队列的保证可靠性和保证消息成功投递的特性,让消息队列成为了实现异步重试的关键,当然引入消息队列后会改变系统架构,从而增加系统的复杂性,所以订阅变更日志在同城交友源码开发时更受欢迎。

在同城交友源码中,要想保证缓存和数据库一致性,推荐使用“先更新数据库,再删除缓存”的方案,同时还要配合消息队列或订购变更日志使用。由于性能和一致性不能同时满足,所以为了保证系统性能,我们追求的只是最终一致性。

声明:本文由云豹科技原创,转载请注明作者名及原文链接,否则视为侵权

标签: