web-dev-qa-db-ja.com

Memcacheの最大キー有効期限

Memcachedの最大キー有効期限は何ですか?

有効期限を指定せずにキャッシュがいっぱいになった場合、どうなりますか?

45
cfischer

日数の代わりにUnixタイムスタンプを指定することにより、キーの有効期限を日付に設定できます。この日付は30日以上先になる可能性があります。

有効期限は、符号なし整数秒で指定されます。 「無期限」を意味する0から30日間(60 * 60 * 24 * 30)まで設定できます。 30日を超える時間は、Unixタイムスタンプ日付として解釈されます。来年の1月1日にオブジェクトを期限切れにしたい場合、これがその方法です。

https://github.com/memcached/memcached/wiki/Programming#expiration

ただし、 おっしゃるように 、キーの有効期限を日付ではなく時間に設定する場合、最大値は2,592,000秒、つまり30日です。

53
Paul D. Waite

有効期限を指定せず、キャッシュがいっぱいになると、最も古いKey-Valueが最初に期限切れになります。

また、新しいアイテムを保存するときにメモリが解放されます。空きチャンクがなく、適切なスラブクラスに空きページがない場合、memcachedはLRUの最後で「再生」するアイテムを探します。テール内の最後のいくつかのアイテムを検索して、すでに有効期限が切れているものを探します。したがって、再利用は無料です。ただし、期限切れのアイテムが見つからない場合は、まだ期限切れになっていないアイテムを「排除」します。これは、いくつかの統計カウンターで記録されます

https://github.com/memcached/memcached/wiki/UserInternals#when-are-items-evicted

16
Eimantas

いいえ、制限はありません。 30日間の制限は、そこに滞在する秒数を指定する場合ですが、タイムスタンプを指定する場合、制限できるマシンの最大longまたはint値のみがあります。

->set('key', 'value', time() + 24*60*60*365)は、たとえばキーを1年間そのままにしますが、キャッシュがいっぱいになるか、その間にキャッシュが再開される場合、この値は削除できます。

10
Pierre

有効期限(秒単位)。 30日まで可能です。 30日後、正確な日付のUNIXタイムスタンプとして扱われます。

https://code.google.com/p/memcached/wiki/NewCommands#Standard_Protocol

3
Umpa

OK、秒数は2592000(30日)を超えないことがわかりました。したがって、最大有効期限は30日間です。

1
cfischer

一部の回答が無効になっているようです。

TTLが高すぎると、キーがまったく設定されないことがわかりました。たとえば、2992553564

次のPHPコードでテスト:

var_dump($memcached->set($id, "hello", 2992553564);  // true
var_dump($memcached->get($id));                      // empty!

var_dump($memcached->set($id, "hello", 500);  // true
var_dump($memcached->get($id));               // "hello"

バージョンはmemcached 1.4.14-0ubuntu9

1
Daniel W.

オンlaravel config.session.lifetime設定は、上記の30日間に相当するように設定されている場合、タイムスタンプと見なされます(これによりtoken mismatch常にmemcachedが使用されていると仮定しています)。

答えとして、memcachedの有効期限はいつでも設定できます。 (Laravelのデフォルト設定(v5.0)では、すでに有効期限切れのタイムスタンプに設定されます)。設定しなかった場合は、デフォルトが使用されます。

0
marlo