如何使用mysql主从架构管理缓存失效,并将数据从主服务器同步到从服务器有延迟?

时间:2018-04-17 19:19:05

标签: c# asp.net caching memcached enyim

我们希望在我们的网站上获得一些注册卖家的卖家联系。我们已经实现了memcached。因此,我们首先检查此对象是否存在缓存键,我们返回缓存对象,否则,我们从数据库中读取数据。

在数据库中,我们在master数据库上写入数据。但我们从奴隶数据库中读取。

以下是API序列调用,会产生问题:

GET API(SellerContact):它的第一个请求,因此找不到缓存键。现在,我们接近slave数据库,数据库中也没有卖家联系人记录,因此,我们在memcache中创建一个NULL对象,因为卖家联系不存在,此密钥的有效期为30天。

POST API(SellerContact):在主数据库中创建新的股票实体,使用上述具有NULL对象的GET请求创建的密钥无效。

GET API(SellerContact):如果在主数据同步到从属数据库之前执行此GET,则此GET将找不到任何memcache密钥,因为POST请求已使其无效,因此,它将转到数据库。由于它是读操作,它将接近Slave数据库,该数据库没有从master数据库获得新对象。因此,slave数据库将获取NULL对象,它将在memcache中保存30天。

这个问题的解决方案很少:

  1. 计算主机到从机同步过程的最大延迟b / w仅在该延迟时间后刷新内存缓存密钥,即如果最大可能延迟为5分钟,则对于任何内存缓存密钥清除请求,请求5分钟后清除它清除日期时间。
  2. 一旦收到POST请求,我们会在master数据库中更新记录后立即创建新的Memcache密钥。这将为POST请求创建开销,并且可能会创建很少的不需要的密钥。
  3. 这个问题有更好的解决方案吗?

0 个答案:

没有答案