0

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

在数据库中,我们将数据写入主数据库。但是我们从从数据库读取。

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

GET API (SellerContact):它的第一个请求,所以没有找到缓存键。现在,我们接近从数据库,数据库中也没有seller-contact记录,因此,我们在memcache中创建一个NULL对象,因为seller-contact不存在,这个key的有效期是30天。

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

GET API(SellerContact):如果在主数据同步到从数据库之前执行此 GET,则此 GET 将找不到任何 memcache 键,因为上述 POST 请求已使其无效,因此它将进入数据库。由于是读操作,它会接近从主数据库中没有新对象的从数据库。因此,从数据库将获取 NULL 对象,并将在 memcache 中再保存 30 天。

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

  1. 找出最大延迟黑白主从同步过程并仅在该延迟期之后刷新内存缓存键,即如果最大可能延迟为 5 分钟,那么对于任何内存缓存键清除请求,在请求的清除日期时间的 5 分钟后将其清除。
  2. 一旦我们收到 POST 请求,我们会在主数据库中更新记录后立即创建新的 Memcache 键。这将为 POST 请求产生开销,并且可能会创建一些不需要的密钥。

这个问题有更好的解决方案吗?

4

0 回答 0