9

memcached wiki から:

テーブルがいっぱいになると、後続の挿入により、古いデータが使用頻度の低い (LRU) 順にパージされます。

次の質問があります。

  1. どのデータがパージされますか? 挿入によって古いもの、または最近使用されていないもの? 最近アクセスしたデータがd1挿入によって最も古く、データの置換中にキャッシュがいっぱいになった場合、それは置換されd1ますか?

  2. memcached とやり取りするために PHP を使用しています。memcached でデータを置き換える方法を制御できますか? キャッシュがいっぱいになっても、有効期限が切れるまでデータの一部を置き換えたくないのと同じように。このデータは置き換えないでください。代わりに、他のデータを削除して挿入することができます。

  3. データの有効期限が切れると、すぐに削除されますか?

  4. 保存されているキーの数が memcached のパフォーマンスに与える影響は?

  5. -kのオプションの意味は何memcached.confですか? 「すべてのページメモリをロックダウン」が何を意味するのか理解できません。また、READMEの記載が不十分です。

4

1 に答える 1

16

memcached が新しいデータをメモリに保存する必要があり、メモリがすでにいっぱいになっている場合、次のようになります。

  • memcached は適切な*期限切れのエントリを検索し、見つかった場合はそのエントリのデータを置き換えます。ポイント 3) データはすぐには削除されませんが、新しいデータを設定する必要がある場合は、スペースが再割り当てされます。
  • 期限切れのエントリが見つからない場合は、最近使用されていないエントリが置き換えられます

*memcached がメモリを処理する方法に注意してください。さまざまなサイズのブロックが割り当てられるため、キャッシュに設定するデータのサイズが、削除するエントリを決定する役割を果たします。エントリは、2K、4K、8K、16K... など、最大 1M のサイズです。

この情報はすべてドキュメントに記載されているので、注意深く読んでください。@deceze が言うように、memcached はデータがメモリ内で利用できることを保証するものではなく、キャッシュ ミスの嵐に備える必要があります。ミス ストームを回避するための興味深いアプローチの 1 つは、有効期限をランダムなオフセット (たとえば 10 + [0..10] 分) で設定することです。すべてのアイテムが同時に期限切れになるわけではありません)。

また、キャッシュに何かを保存したい場合は、次の 2 つのことを行う必要があります。

  • キャッシュにデータのロードを要求するウォームアップ スクリプト。だからいつも最近使ってる
  • アイテムの 2 つの有効期限: 1 つの実際の有効期限、たとえば 30 分です。別 - アイテムと共にキャッシュされます - 論理的な有効期限、たとえば 10 分です。キャッシュからデータを取得するときに、論理的な有効期限を確認し、有効期限が切れている場合は、データを再読み込みしてキャッシュにさらに 30 分間設定します。このようにして、実際のキャッシュの有効期限に達することはなく、データは定期的に更新されます。

5) 「memcached.conf」の -k オプションの意味は何ですか。「すべてのページメモリをロックダウンする」の意味がわかりません。またREADMEの記載も不十分です。

memcached に割り当てるメモリの量に関係なく、必要な量だけを使用します。たとえば、実際に使用されるメモリのみを割り当てます。ただし、-kオプションを使用すると、memcached の開始時にメモリ全体が予約されるため、必要かどうかに関係なく、常にメモリ全体が割り当てられます。

于 2012-06-27T10:15:33.217 に答える