memcachedでレアな不具合

memcachedを使っているサービスにて、ある日、データのキャッシュが更新されない現象に遭遇した。キーと値をダンプしてみたところ、タイムスタンプがおかしな値になっていた。
心当たりというと、そういえばサーバの日付がおかしくなっていた日があったような気がする。
memcachedは、利用する際にexpireを指定するのだけど、実装としては無効になるepoch値を保持するようになっている。なので未来の日付でキーが作成されてから時計が戻されると、ずっと無効にならないということのようだった。
更新されていくデータに対してキー名が変わらない、というのは、(発生頻度はともかくとして)こういう気づきにくいバグを生むのでよくない。
きっとベストプラクティス的なものがあるのだと思うが、安直に、キー名にタイムスタンプをつけて解決を図ることにした。すなわち yyyymmddhh_keyname みたいな感じである。これで仮に日付がぶっ飛んでも、おかしくなっていた間に生成されたキーを無視することができる。

ところでPHPにはMemcacheとMemcachedというライブラリがあって、Memcachedの方が新しいのだけど、手軽にキーの一覧を取る方法がなくてデバッグ時に困る。どうしろと...