1

根据https://github.com/mperham/dalli,我们可以配置多个 Memcache 服务器。但我不确定它是如何工作的。

假设我们正在使用具有两台服务器的 memcache 集群:memcache1(box1) 和 memcache2 (box2)。

  • 用户 A 和用户 B 共享同一个资源。
  • 用户A登录并读取box1中缓存的共享资源。
  • 用户 B 登录并读取 box2 中缓存的共享资源。
  • 用户 A 更新共享资源并使 box1 上的缓存过期
  • 用户 B 看不到更新的资源,但仍然在 box2 中获得缓存。

到目前为止,这是我的理解,我不确定缓存过期在集群环境中是如何工作的。特别是,当我们想急切地使缓存过期时,它会在所有盒子上过期吗?

鉴于我们在两个 rails 服务器中有类似的配置:

config.cache_store = :dalli_store, 'memcache1', 'memcache2'

您如何看待这个用例?

感谢您的所有兴趣。

4

1 回答 1

9

Memcached 分片是分片,而不是复制。也就是说,每台服务器上都没有数据的副本;数据在服务器之间拆分。

密钥只会存在于一台服务器上。Dalli 通过分发算法传递密钥以确定哪个服务器将拥有给定密钥,然后将消息传递到该服务器。多个服务器上不会存在相同的密钥,因此您不必担心同时使两个服务器上的密钥过期。如果您使密钥过期,它将在它所在的单个盒子上过期。

如果两个用户都通过相同的缓存键请求数据,那么使该缓存键过期将使他们两个都失效;您不必担心用户 1 会被路由到 Box 1,而用户 2 会被路由到 Box 2,因为给定的密钥将始终映射到给定的服务器。

于 2012-12-14T01:35:24.743 回答