Xmemcache + TimeUnitの組み合わせでミリ秒を利用して嵌った
実験環境:
xmemcached : 1.3.8
memcached : 1.4.11
作ろうとしていた機能は以下の様なものです。
- キャッシュを探してデータがあればそれを返す。なければ次の処理を実行する。
- 別システムからデイリーで変更されるIDのリストを取得する
- それぞれのデータにプログラム側が持ってるメタ情報をくっつける。
- 組み立てたデータを毎時15時パージするようにキャッシュに放り込む
- 組み立てたデータを返す。
実際に起きた現象はこんなかんじです。
1日目・2日目は正常にデータが更新される。
3日目以降は2日目のデータが残り続ける。
結論からいうと、TimeUnitで時間の単位変換をしようとして、toSeconds(ttl)を利用する際に、粒度の細かい方から粗いほうへ変換した際に値の切り詰めが発生してしまった感じです。
値の切り詰めに関しては、TimeUnit (Java Platform SE 6)を参考にしてください。