複数のノードで memcached を使用して Ruby on Rails プロジェクトのキャッシュ キーを適切に削除するにはどうすればよいですか?

概要

私の ROR プロジェクトは現在、AWS elasticached 上の memcached (3 ノード) を利用して、データベースからの読み取りを回避しています。キーを削除しようとすると、キャッシュから読み取ると古いデータが返されるため、Rails または Memcached は 1 つまたはいくつかのノードのキーのみを削除することが多いようです。

これを防ぐ、またはノードでキーの削除が失敗した場合にキーの削除を再試行するような設定が Rails または memcached にありますか?

私のもう 1 つのオプションは、Rails キーにバージョン番号を追加することです。これより良い解決策がない場合はこれを実行します。

解決策

ドキュメントを確認しましたか?フラグメント キャッシュと ActiveSupport::Cache::MemCacheStore のガイド ドキュメントでは、構成の間違いについて触れている可能性があります。

Memcached は古いキャッシュ ファイルを自動的に削除するはずなので、有効期限を手動で管理しているように思えます。何をしているかによっては、フェイルセーフとしてデフォルトの有効期限を設定すると良い場合があります。キャッシュ ストア構成にサーバーを追加するか、MEMCACHE_SERVERS が更新されていることを確認する必要がある場合があります (レールと Dalli::Client サーバー構成の両方で MEMCACHE_SERVERS を検索するため、信頼できる共有ソースとして MEMCACHE_SERVERS を維持することがおそらく最善です)。 Memcached サーバーは互いに独立しており、通信する方法がありません。これらは、関連するすべてのサーバーに並列リクエストを送信するために Memcached クライアントに依存しているため、クライアントを回避する方法で削除が発生している場合は、説明している問題が発生する可能性もあります。