根据https://github.com/mperham/dalli,我们可以配置多个Memcache服务器。但我不确定它是如何运作的。
假设我们正在使用带有两个服务器的memcache集群:memcache1(box1)和memcache2(box2)。
到目前为止,我的理解是,我不确定缓存过期在集群环境中是如何工作的。 特别是,当我们想要急切地使缓存过期时,它会在所有盒子上到期吗?
鉴于我们在TWO rails服务器中具有相同的配置:
config.cache_store = :dalli_store, 'memcache1', 'memcache2'
您如何看待此用例?
感谢您的关注。
答案 0 :(得分:9)
Memcached分片是分片,而不是复制。也就是说,每台服务器上都没有数据副本;数据在服务器之间分开。
密钥只存在于一台服务器上。 Dalli通过分发算法传递密钥以确定哪个服务器将拥有给定密钥,然后将消息传递到该服务器。多个服务器上不存在相同的密钥,因此您不必担心一次性使两个密钥都到期。如果您使密钥过期,它将在其所在的单个框上过期。
如果两个用户都通过相同的缓存密钥请求数据,那么使该缓存密钥失效将使两者无效;您不必担心用户1被路由到Box 1,而用户2被路由到Box 2,因为给定的密钥将始终映射到给定的服务器。