memcachedに依存するシステムやコードを書く人は大嫌いな訳だけど、スケーラビリティを向上させてレスポンス時間の高速化には必須なmemcachedですが、最近のプロトコル変更には疑問を感じてしまう。
1.4.0では、こちらに書いた通り、いつの間にかdeleteのtimeoutがサポートされなくなった。なので、
delete key timeout noreply
というコマンドが無効になって困ることになった。それでも
delete key timeout
というコマンドは、timeoutにどんなも文字列が入っていてもエラーになることはなかった。timeoutは効かないけど。
ここから1.4.4ではさらに悪化。timeoutが0でないとエラーになるようになった。つまり
delete key 0 noreply
delete key 0
は有効なんだけど、
delete key 10
がエラーになるようになった。 この変更のコミットはこれ。
実際試す。
% telnet localhost 11234
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
version
VERSION 1.4.4
delete key 10
CLIENT_ERROR bad command line format. Usage: delete <key> [noreply]
quit
プロトコルの変更は下位互換が基本中の基本だと思うんだ。また1つmemcachedが嫌いになった。