0

私は Memcache のために先週かそこら働いていましたが、キーの設定/削除の方法をなんとか理解できました。これは問題ありませんが、結果の while ループに対して同じことを行う方法をまだ試しています。

たとえば、投稿の while ループがあり、ロジック内から関数が Memcache が設定されているかどうかを確認し、設定されていない場合は結果を収集してキーを作成します。私の質問はこれです、ループされたデータをセットキーに設定し、セットキーを表示した場合(新しい順)、新しい投稿が挿入されるとどうなりますか?セットキーに時間制限を設定できることは理解していますが、制限を設定しても古い投稿がまだ表示される可能性があると思われる場合はいつでもコンテンツが追加される/追加される可能性があるためです。だから私の質問は、どのようにしてセットキーを更新できるかということです。

可能な解決策を考えることができる唯一の方法は、ユーザーが新しい投稿を挿入するとキーが削除され、すべての投稿が再度表示されたときにキーが再度設定されるときです。しかし、これはかなり逆効果に思えます。投稿を送信するユーザーが何十人もいる場合、すべての投稿が何度も何度も設定されるのと同じです (実際には有益ではないようです)。

これが理にかなっていることを願っています。助けやガイダンスをいただければ幸いです。

4

1 に答える 1

0

はい、新しい投稿があるときにキーを削除すると、指定したシナリオが発生します。それを回避するには、a) memcache の有効期限を使用するか、b) キャッシュ再構築のしきい値を制御する独自のジョブ システムを維持します。

Memcache の有効期限

PHP にはMemcacheMemcachedという 2 つの Memecache PECL プラグインがあります。Memcached (d サフィックスに注意してください) はtouchと呼ばれるメソッドをサポートしており、既存のアイテムに新しい有効期限を設定できます。キャッシュを 2 時間に設定すると仮定すると、新しい投稿が表示されたときに、 を使用して有効期限を 10 分に設定できますtouch。したがって、次の 10 分以内に新しい投稿がある場合、キャッシュは 1 回だけ再構築されます。この手法は、技術用語でデバウンスとして知られています。

いくつかのコード:

$_memcached = new Memcached;
if(!$_memcached->addServer('localhost',11211))
{
    $_isConnected = FALSE;
}
else
{
    $_isConnected = TRUE;
}

$_memcached->touch($key, $expiry);

$_memcaced->add($key, $value, $expiry);

注意: これは単なる例です。シングルトン クラスを作成して使用してください。

古い Memcache プラグインを使用する必要がある場合はtouch、(atomic)getset.

ジョブシステム

ジョブ システムがある場合は、キャッシュの再構築の頻度を制御するためにジョブ アグリゲーターによって実行される新しい投稿が表示されるたびにジョブを送信します。

Memecached を使用するのが最善の方法のようです。

于 2013-02-10T13:02:03.077 に答える