使用Memcached缓存策略?

时间:2009-03-31 16:22:08

标签: architecture memcached scalability

我是新手在大型网站上使用像Memcached这样的分布式缓存解决方案,我有几个问题,并且可能有人对这些评论有经验。

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

  2. 我应该在memcached中缓存更小但更多的对象,还是更大但更少的对象?较小的对象确实涉及到DB的更多往返,以获得它们,但它更灵活,更容易编程。

  3. 非常感谢,

2 个答案:

答案 0 :(得分:4)

Memcached在内部使用哈希来进行O(1)查找 - 它被设计为尽可能少的复杂工作。

至于要缓存的内容,无论大小,它都是关于你需要存储的内容,这将节省你的工作量(记住它是一个很大的哑巴缓存,你必须帮助保持同步,如果你改变一个也被称为其他地方)。在原始网站上,它是为Livejournal.com编写的,有意义的最大块是一个完整的日记条目 - 作为完成的HTML,任何被允许看到该特定帖子的人都可以使用。

我已经将它用于一些非常小的条目 - 实际上是针对成员ID的单个数字,但是我使用单个数据库查询生成几千个这样的条目,而不是根据需要一次生成一个

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

答案 1 :(得分:3)

  

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

理想情况下,您的缓存应始终100%满。 memcached使用散列算法来查找密钥,因此据我所知,存储更多密钥不会有性能损失。

  

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

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

相关问题