Architecture 使用Memcached的缓存策略?

Architecture 使用Memcached的缓存策略?,architecture,memcached,scalability,Architecture,Memcached,Scalability,我不太熟悉在大型网站上使用分布式缓存解决方案,比如Memcached,我有几个问题,请有经验的人发表评论 显然,我可以放入缓存的数据量取决于服务器RAM。假设我有足够大的服务器场和RAM,在我开始看到性能下降之前,是否有最大数量的对象可以放入memcached?我问这个问题的原因是,我想如果我把数以百万计的对象放入memcached,它索引和查找对象的时间会不会更长?这里有界线吗 我应该在memcached中缓存更小但更多的对象,还是缓存更大但数量更少的对象?较小的对象确实需要更多的到DB的往返

我不太熟悉在大型网站上使用分布式缓存解决方案,比如Memcached,我有几个问题,请有经验的人发表评论

  • 显然,我可以放入缓存的数据量取决于服务器RAM。假设我有足够大的服务器场和RAM,在我开始看到性能下降之前,是否有最大数量的对象可以放入memcached?我问这个问题的原因是,我想如果我把数以百万计的对象放入memcached,它索引和查找对象的时间会不会更长?这里有界线吗

  • 我应该在memcached中缓存更小但更多的对象,还是缓存更大但数量更少的对象?较小的对象确实需要更多的到DB的往返来获取它们,但它更灵活,更易于编程

  • 多谢各位

    假设我有足够大的服务器场和RAM,在我开始看到性能下降之前,是否有最大数量的对象可以放入memcached

    理想情况下,您的缓存应该始终是100%满的。memcached使用散列算法查找密钥,据我所知,存储更多密钥不会导致性能下降

    我应该在memcached中缓存更小但更多的对象,还是缓存更大但数量更少的对象


    我认为更大但更少的对象会更好地减少数据库和缓存查找的时间量,但您应该根据具体情况来考虑。除非您知道性能差异将是巨大的,否则我建议您先从最简单的开始,如果这还不够,就从那里开始工作。

    Memcached在内部使用哈希进行O(1)查找—它的设计目的是尽可能少地做复杂的工作

    至于缓存什么,大的还是小的,这实际上是关于你需要存储什么来节省你的精力(记住它是一个大的哑缓存,如果你更改了一个在别处也提到过的部分,你必须帮助它保持同步)。在最初的网站Livejournal.com上,有意义的最大块是一个完整的日志条目——作为完成的HTML,任何被允许查看该特定帖子的人都可以使用它

    我用它来处理一些非常小的条目——实际上是一个成员ID对应的单个数字,但是我用一个数据库查询大量生成了几千个这样的条目,而不是根据需要一次生成一个


    如果您知道只存储非常大或非常小的项目,那么可以对守护进程进行一些优化,但是对于许多小项目,它有足够的智能,可以将空的大块内存分割成更小的块以供使用。

    感谢您的输入。我是否应该选择更少的往返,但更多的服务器内存使用,然后更多的往返,但更少的服务器内存使用?总的来说,我会这么说:你总是可以买到比购买更多带宽更便宜的内存。所以我宁愿减少往返次数,除非我有充分的理由不这样做。如果你为memcached使用的带宽付费,那么你可能不应该使用它。也就是说,由于网络延迟,更少的往返速度会更快,尽管multi-get在这方面也有很大帮助?我应该缓存30秒还是2分钟?数据多久更改一次?如果它会经常更改,但不会经常使用,那么缓存它可能不会给您带来很大好处。如果它很少更改,您可以将其缓存数周,但在更改时将其从缓存中删除,以便重新读取。投票选出有用的答案。