我正在考虑将MemCached用于我正在开发的Web应用程序,在过去几天研究MemCached之后,我遇到了一个我无法找到答案的问题。
如何将Memcached服务器链接在一起或如何在MemCached服务器之间复制数据?
此外:此功能是由服务器还是客户端控制以及如何实现?
答案 0 :(得分:7)
当您设置多个服务器时,客户端库使用第一个哈希来选择存储每个密钥/数据对的位置。这意味着没有复制,并且每个客户端都必须使用同一组服务器。
的优点:
缺点:
如果您可以控制客户端的代码,则可以在两台服务器上简单地存储两次密钥/数据对。在从不同的客户端阅读时,一定要搜索相同的地方。
答案 1 :(得分:5)
我已经使用了BeITMemcached,你可以创建一个MemcacheClient实例并设置你想要使用的服务器,就像字符串一样。
此时,客户端自己确定哪些服务器可用于放入不同的项目。你永远不知道项目将在哪个。
检查here to see how the servers handle failover。
最简单的方法是拥有重新填充机制。在我的例子中,我在memcache中存储了几百个来自数据库的对象。我可以称之为重新填充并将它们全部放回原处。每当我向数据库添加,更新或删除它们时,我都会对memcache进行相同的调用。
答案 2 :(得分:2)
http://repcached.lab.klab.org/
此外,PHP PECL内存缓存客户端可以将数据复制到多个服务器,请参阅memcache.redundancy。
答案 3 :(得分:1)
听起来你希望有能够应对机器重启的缓存等等......
在很多情况下(假设你没有写Facebook),RDMS足够快,可用于缓存。只需创建一个包含键和blob列的表。如果RDBS服务器有足够的RAM,则所有数据都将存储在RAM中,并保存到磁盘以便进行恢复。
请记住,这可能是与主数据库服务器不同的服务器。
如果您希望获得更多花哨并且正在使用高端RDMS,您可以在用于构建“缓存数据”的查询上设置更改通知,以删除过时的行缓存。
有人可以设置触发器来清除缓存中的无效行,但这可能非常复杂。
答案 4 :(得分:0)
Memcached不提供复制属性。为此,您需要将服务器添加到memcached客户端服务器列表,然后点击DB以将数据存储在该特定服务器中。
答案 5 :(得分:0)
你应该认真考虑CouchBase。它使用memcached协议,提供几乎相同的速度,并提供您正在寻找的自动复制。它也会持久存储到磁盘,因此您的缓存永远不会冷。