所以我正在开发一个Web应用程序 - 必须构建它以实现可伸缩性。它将频繁的MySQL查询存储到缓存中。我已经构建了很多东西并准备好了 - 但是我担心处理缓存数据的地方的最佳实践。我和几个人交谈过,其中一个人建议在所有memcache节点上拆分每个键/值。
如果我存储示例的意思:'somekey','这是值'
它将被拆分为3个内存缓存服务器。
那是更好的方法吗?或者memcache是建立在1对1关系上的吗?例如。
在服务器A上存储值,直到它出现故障 - 转到服务器B并存储在那里。
这是我目前对我所做的研究和过去使用memcache的经验的理解。
有人可以指出我在这方面的正确方向,让我知道哪种方式最好,或者我是否完全混淆了。
由于
答案 0 :(得分:0)
我会在php中使用一致的哈希
请参阅http://php.net/manual/en/memcached.constants.php
这样,如果内存缓存服务器出现故障,您的密钥将不会被重新分发:)
根据我的经验,memcache服务器非常可靠,并且通常会因操作系统升级而重新启动。
如果您不使用一致性哈希,那么如果服务器熄灭并返回,那么您可能在该服务器上缓存了一段旧数据。
IE Memcache服务器A,B
A: set key = 1234, value = 'abc', expires = 1 day
B:
after a time
A: vanishes
B: get key = 1234
returns nothing
B: set key = 1234, value = 'def', exipres = 1 day
after more time
A: comes back!
get_key(1234)返回'abc',因为A现在可用。!
-daniel