設計上の決定でSetting and expiration time
が省略されていることに気づきました。 これは、この機能をエミュレートする方法についてのアイデアがあるためだと思います。
私が念頭に置いているユースケースは、Webアプリの前にキャッシュされたリバースプロキシを構築することです。 ページはX分間キャッシュする必要があることを私は知っています。
これにどのように取り組むかについて少し詳しく教えてください。
(これが質問をするのに適切な場所かどうかはわかりません。)
groupcacheの設計を理解している限り、キャッシュされたアイテムを無効にしたり更新したりすることはできません。この機能は、分散システムでは非常に難しく、高価なコンセンサスアルゴリズム(paxosなど)が必要になるため、省略されています。
ただし、時間情報をキャッシュキー自体にエンコードすることにより、X分ごとに一意のキャッシュキーを生成できます。 たとえば、「foo-12:30」は、12:30の時点でアイテム「foo」を一意に表す場合があります。 その後、アプリケーションは、たとえば12:40までこのアイテムにアクセスできます。 このとき、新しいアイテム「foo-12:40」が生成される可能性があり、クライアントがアクセスを停止すると、古いアイテム(「foo-12:30」)は最終的に期限切れになります。
分散アプリケーションが一貫した方法でリビジョン番号を更新および取得できる場合(たとえば、doozerd、zookeeper、または選択したデータベースソリューションを使用してこれを行うことができます)、このリビジョン番号をキャッシュキーの一部としてエンコードすることもできます。 または、「Last-Modified」または「ETag」HTTPヘッダーをWebプロキシのある種のリビジョン番号として使用できる場合もあります。
はい、tux21bが言ったこと。 (少なくとも今のところ、意図的に省略されています)。
改訂に関する提案をしてくれた@ tux21bに感謝します!
最も参考になるコメント
groupcacheの設計を理解している限り、キャッシュされたアイテムを無効にしたり更新したりすることはできません。この機能は、分散システムでは非常に難しく、高価なコンセンサスアルゴリズム(paxosなど)が必要になるため、省略されています。
ただし、時間情報をキャッシュキー自体にエンコードすることにより、X分ごとに一意のキャッシュキーを生成できます。 たとえば、「foo-12:30」は、12:30の時点でアイテム「foo」を一意に表す場合があります。 その後、アプリケーションは、たとえば12:40までこのアイテムにアクセスできます。 このとき、新しいアイテム「foo-12:40」が生成される可能性があり、クライアントがアクセスを停止すると、古いアイテム(「foo-12:30」)は最終的に期限切れになります。
分散アプリケーションが一貫した方法でリビジョン番号を更新および取得できる場合(たとえば、doozerd、zookeeper、または選択したデータベースソリューションを使用してこれを行うことができます)、このリビジョン番号をキャッシュキーの一部としてエンコードすることもできます。 または、「Last-Modified」または「ETag」HTTPヘッダーをWebプロキシのある種のリビジョン番号として使用できる場合もあります。