在memcached和多个密钥中存储单个大对象

时间:2017-08-02 08:48:56

标签: memcached

我在memcache中缓存了大型对象(20KB) -

Product : 
{
    BasicInfo, //~5KB
    SellerId,  //int
    CityId,    //int
    AdditionalInfo //~15KB
}

可以在多个地方访问 -

  1. 在某个地方,只需要sellerId或cityId。
  2. 在某些地方,只需要basicInfo。
  3. 在某些地方,需要整个物体。
  4. 所以我们在第一和第二种情况下不必要地获取整个对象,而我们只需要一些字节。我应该将它们分别存储在memcache中(唯一的问题是我需要在更新时使多个键无效)?

    有没有更好的方法来处理这些案件?

1 个答案:

答案 0 :(得分:0)

这里要考虑两个方面,以及它们之间的权衡。

  1. 访问缓存数据的时间
  2. 数据的一致性
  3. 如何存储小颗粒数据将减少访问时间,即为什么复杂对象需要更多时间?

    1. 要在memcache中存储任何值,必须对其进行序列化和反序列化。对象越复杂,它将为应用程序端添加更多的序列化和反序列化处理。

    2. 在生产中常见的是将memcache放在单独的机器中(相同的n / w或不同的n / w)。在这种情况下,由于网络i / o和往返时间的原因,较大的数据大小会增加延迟。

    3. 使用完整对象或多个粒度对象是一种权衡。

      在我们的例子中,我们主要为缓存数据使用缓存是高频率读取并且很少更新。我们存储粒度级对象。