0

私は自分のウェブサイトにキャッシングシステムを注入することを計画しており、それをさまざまなレイヤー(データ、プレゼンテーション、その他の場所にある可能性があります)で使用します。スタックLAMPとAWS上のインフラストラクチャ100%クラウドであるため、当然の選択はAmazon Elasticache(memcachedのマネージドインストール)だと思いました。だが...

驚いたことに、私にとっては、memcachedに依存関係管理がまったくないことを発見しました。ASP.NetキャッシュのSqlDependencyやFileDependencyのような「高度な」ものは必要ありませんが、memcachedは他のキーの簡単な依存関係も提供しません。これは、無効化プロセスを大幅に簡素化する依存関係ツリーを構築するのに非常に便利です。

それで、memcachedが多くの複雑なシステムで使用されていることを知っているので、何かが足りませんか?これを無関係にする使用パターンはありますか?

ありがとう

求められたとおりに更新し、意味を明確にするためにいくつかの擬似コードを追加します

dependency = 'ROOT_KEY';
cache:set(dependency, 0, NEVER_EXPIRE);

expire = 600;
cache:set('key1', obj1, expire, dependency);
cache:set('key2', obj2, expire, dependency);
...
cache:set('keyN', objN, expire, dependency); 

//later, when I have to invalidate
cache:remove(dependency); //this will cause all keyX to be invalidated too
4

1 に答える 1

0

あなたの質問の例に基づいて、memcached(およびElastic Cache)は、そのようなキーを関連付けてグループとして操作できる、探しているようなキーメタデータをサポートしていません。

少数の異なる「依存関係」しかない場合は、複数のエラスティック キャッシュ インスタンスを利用するだけで、各インスタンス/依存関係内のすべてのアイテムを同時に無効にできると思います。もちろん、キャッシュサイズを個別の量でしか増やすことができないため、AWSハードウェアコストの点で、希望よりも多くのコストがかかる可能性があります. これにより、ルックアップが発生する依存関係/インスタンスを知らずにキャッシュ ルックアップを実行することもできなくなります。

あなたがやろうとしていることについて、すぐに使えるタイプのソリューションをもっと探している場合は、MySQL/RDS のメモリ テーブルのようなものを使用できるかもしれません。もちろん、RDS の高可用性機能やポイント イン タイム リストアは、ディスクへの書き込みが必要なため破損するため、使用したくないでしょう。基本的に、これらのメモリ テーブル以外は何もしないスタンドアロンの RDS インスタンスが必要です。

これらのオプションはどれもあなたがやろうとしていることに実際にぴったり合っているようには見えません. .

于 2012-10-23T20:51:31.510 に答える