web-dev-qa-db-ja.com

プラグインのアンインストール時にキャッシュをクリアする

プラグインをアンインストールすると、サイト(またはマルチサイトの場合はネットワーク)からすべての関連データが削除されます。たとえば、プラグインがデータベースにテーブルを追加する場合、データベースからそれらのテーブルを削除する必要があります。

私の質問は、プラグインが実際には_doing_it_right()であり、wp_cache_*()関数を使用してそれらのデータベーステーブルに対して行うクエリのいくつかをキャッシュするこのようなケースに関するものです。

私はプラグインがアンインストールされるとき、それはおそらくそれらのキャッシュをクリアするべきだと私は考えています。私が考えているのは、アンインストール後にユーザーがプラグインを再インストールする可能性があるということです(たとえば、単にテストしていてテストデータを消去して新しく始めたい場合など)。アンインストール時にキャッシュがクリアされないと、プラグインは再インストール後にキャッシュからそのゴーストデータを取得し、非常に奇妙な動作を引き起こす可能性があります。

もちろん、これは主にある種の永続的キャッシングを持つサイトにとっての懸念です。 (そして、古いデータはもっと長く保存される可能性があるため、かなり大きな容量のストレージを使用している場合はさらに悪化します。)

ただし、永続キャッシングバックエンドが有効になっているサイトでは、アンインストールされたプラグインから大量の古いデータをそこに格納するのは理想的ではありません。

それらのキャッシュをクリアしようとすることの欠点は、キャッシュグループ全体をクリアする方法がないということです。プラグインはデータベーステーブル内のオブジェクトのすべてのIDをループ処理し、それぞれのキャッシュをクリアする必要があります。そのため、キャッシュをクリアすることとそのままにすることとの間でリソース使用量のトレードオフがあります。

私の質問は、他の誰かがプラグインキャッシュをアンインストール時にクリアすべきかどうか、そしてそのトレードオフがそれに見合うだけの価値があるかどうかを検討していますかこれは既知のベストプラクティスですか?

1
J.D.

特定の要件に応じて、これにはさまざまなアプローチがあります。

例えばあなたの場合、あなたはプラグインがゴーストデータを拾うことに取り残されているデータよりも心配しているように見えます。このような場合は、使用する固有のキープレフィックスを生成し、アンインストール時にそれをフラッシュするだけで、より簡単に処理できる場合があります。接頭辞なし=データアクセスなし。

一般的なの場合は、この問題を無視し、過渡現象に適切なタイムアウト値を使用することです。データが特定の期間だけ関連している場合は、適切なタイムアウトを使用して暗黙的に問題なく処理します。

オプションは1つのセットとして保存することができる(すべきです)ので、それらをクリアするのは簡単で速いです。

1
Rarst

はい、それらはそうあるべきです、特にキャッシュはユーザがプラグインで削除されることを望むかもしれない機密情報を含むかもしれないので。

最善のことは、すべての永続情報を簡単に削除できるようにシステムを設計することです。たとえば、すべてのキャッシュファイルを1つのディレクトリに配置します。

あなたの例に関しては、理論上のキャッシュはオブジェクトの一部であるべきではありません(それは決してそれの説明ではありません)、それであなたの問題はキャッシュをクリアすることであなたの問題につながるあなたのオブジェクトの設計にあります。あなたの唯一の選択肢がDB内のキャッシュであるなら(そしてそれは初期の最適化の徴候のように私には聞こえます)それでそれのために別のテーブルを使用してください。

更新

wp_cache_* APIが永続ストレージを使用するというあなたの仮定は誤りです。コアコードが永続的ではなく、キャッシュを動かしているものが時々「ガベージコレクション」を実行することは、コアコードの根底をなす前提です(coreはキャッシュから何かを削除することはめったにありません)。ガベージコレクションを実行しないキャッシングシステムは、実行していないかのようにRAM /ディスク領域を使い果たすようになるかのように、非常に特殊であるかバグがあります。

加えて、キャッシュの実装は削除をサポートしていないかもしれません(ありそうもないですが、時々奇妙なことが起こります)ので、どんな場合でもデータをクリアすることはできません。

本質的に。一方ではそれらはあなたが何かを確実に削除することを確実にするのに十分なコントロールを持っていないかもしれないサードパーティ製のツールです、実際にそれらのほとんどはあなたのデータを自動削除するのに十分賢いですそれをクリーンアップする問題を「持つのがいい」としていますが、それは本質的なことではありません。

そしてはい、人々はキャッシュにredisを使用しますが、IMOそれは間違いです。 redisはnosql DBであり、RAM /分散キャッシュではありませんが、おそらく1つのように使用するように設定できます。

0
Mark Kaplun