1

https://github.com/mperham/dalliによると、複数のMemcacheサーバーを構成できます。しかし、それがどのように機能するかはわかりません。

memcache1(box1)とmemcache2(box2)の2つのサーバーでmemcacheクラスターを使用していると仮定します。

  • ユーザーAとユーザーBは同じリソースを共有します。
  • ユーザーログインして、box1にキャッシュされている共有リソースを読み取ります。
  • ユーザーBがログインし、box2にキャッシュされている共有リソースを読み取ります。
  • ユーザーAは共有リソースを更新し、box1のキャッシュを期限切れにします
  • ユーザーBは更新されたリソースを表示せず、box2にキャッシュされます。

これまでのところ私の理解ですが、クラスター環境でキャッシュの有効期限がどのように機能するかはわかりません。特に、キャッシュを積極的に期限切れにしたい場合、すべてのボックスで期限切れになりますか?

2つのレールサーバーでこのような同じ構成があるとすると、次のようになります。

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

このユースケースについてどう思いますか?

ご関心をお寄せいただきありがとうございます。

4

1 に答える 1

9

Memcachedシャーディングはシャーディングであり、レプリケーションではありません。つまり、各サーバーにデータのコピーはありません。データはサーバー間で分割されます。

キーは1つのサーバーにのみ存在します。Dalliは、配布アルゴリズムを介してキーを渡し、特定のキーを所有するサーバーを決定してから、そのサーバーにメッセージを渡します。同じキーが複数のサーバーに存在することはないため、両方のサーバーのキーが同時に期限切れになることを心配する必要はありません。キーの有効期限が切れると、それが存在する単一のボックスで有効期限が切れます。

両方のユーザーが同じキャッシュキーを介してデータを要求している場合、そのキャッシュキーを期限切れにすると、両方のユーザーのデータが無効になります。ユーザー1がボックス1にルーティングされ、ユーザー2がボックス2にルーティングされることを心配する必要はありません。これは、特定のキーが常に特定のサーバーにマップされるためです。

于 2012-12-14T01:35:24.743 に答える