2009-09-13 7 views

答えて

41

キーの有効期限を日付に設定するには、日数ではなくUnixタイムスタンプを指定します。この日付は、今後30日を超えてもかまいません。

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

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

しかし、as you sayあなたは時間の量ではなく、これまでのキーの有効期限を設定している場合、最大値は2592000秒、または30日です。

+2

OMG、Railsには、expires_in => 1.monthという数多くのケースがありました。 1.month.from_nowに変更して日付を使用します。 –

+2

参照されているリンクは死んでいます:( – marcgg

+1

@marcgg:ああ、よく斑点あり、ありがとうございました –

15

あなたは有効期限を提供していないと、キャッシュは最も古いキーの値が最初に有効期限が切れているいっぱいになった場合:

メモリも、それは新しいアイテムを保管する時が来たときに再生されます。空きチャンクがなく、適切なスラブクラスに空きページがない場合、memcachedはLRUの終わりを見て、 "reclaim"する項目を探します。すでに終了しているアイテムの末尾の項目を検索し、再利用することができます。ただし、期限切れのアイテムが見つからない場合は、期限切れになっていないアイテムを「削除」します。これは、その後、いくつかの統計カウンタ

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

+2

あなたはこれについて100%確信していますか? –

+1

はい、@DeeJay '、この記事が見つかりました:http://code.google.com/p/memcached/wiki/NewUserInternals – Brett

+2

'新しいアイテムを保存するときには、メモリも再利用されます。空きチャンクがなく、適切なスラブクラスに空きページがない場合、memcachedはLRUの終わりを見て、 "reclaim"する項目を探します。すでに終了しているアイテムの末尾の項目を検索し、再利用することができます。ただし、期限切れのアイテムが見つからない場合は、期限切れになっていないアイテムを「削除」します。これはいくつかの統計カウンターに記載されています。 – Brett

0

OKに記載されて、私は秒数が2592000(30日)を超えてはならないことが分かりました。最大有効期限は30日です。

+11

いいえ、それは当てはまりません。 *期間*フォームの秒数は30日を超えてはなりません。絶対時間として使いたい場合は、3か月の有効期限を指定することができます。有効期限を設定しない場合は、0を指定することもできます。 – Dustin

+2

私はまた、あなたが長すぎる有効期限を設定すると、値がまったく格納されないことも分かりました。 – Datageek

+1

30日間は動作しません(キャッシュを書きません)が29日かかることがわかりました。 – Zubin

9

いいえ制限はありません。 30日の制限は、そこにとどまる秒数を指定する場合ですが、タイムスタンプを指定した場合は、マシン上の最大値または最大値が限界値になります。

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

3

有効期限(秒単位)。 30日まで可能です。 30日後に、 は、正確な日付のunixタイムスタンプとして扱われます。 (これはmemcachedが使用されると仮定しtoken mismatch毎回の誤差を与える)上記30日と同等になるように設定すると、タイムスタンプとみなされること設定laravel config.session.lifetime

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

0

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

0

一部の回答はもう有効ではないようです。

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です。

関連する問題