memcached 1.4.0でdeleteのprotocolが変わった

ので、noreplyでのdeleteが動かない件

あとでblog書く


memcached 1.4.0からdeleteのtimeoutがなくなったので、

delete key [<time>] [noreply]

だったのが、

delete key [noreply]

となった。

see http://github.com/memcached/memcached/commit/5da8dbab2a815c00617ab60b641391ada8d96f40#diff-2


Cache::Memcached::Fastだと、timeoutに0を常にいれてしまうので、

noreply時に死ぬ。(noreplyじゃない場合のtimeoutはmemcached側で無視してくれる)


## check script

#!/usr/bin/perl -l
use strict;
use Cache::Memcached::Fast;

my $cache = Cache::Memcached::Fast->new({
            servers => [{address=>"127.0.0.1:11212",noreply=>1}]
            });
$cache->set('key1','val1');
$cache->set('key2','val2');

# is fail
$cache->delete('key1');

print 'failed get key2' unless $cache->get('key2');
print 'can get key1' if $cache->get('key1');

#実行結果

% perl aa.pl 
failed get key2
can get key1

## memcached log

% ./memcached -vv -p 11212
<32 new auto-negotiating client connection
32: Client using the ascii protocol
<32 set key1 0 0 4 noreply
>32 NOREPLY STORED
<32 set key2 0 0 4 noreply
>32 NOREPLY STORED
<32 delete key1 0 noreply
>32 ERROR
<32 get key2
>32 sending key key2
>32 END
<32 connection closed.
<32 new auto-negotiating client connection
32: Client using the ascii protocol
<32 get key1
>32 sending key key1
>32 END
<32 connection closed.
created by blog.nomadscafe.jp

コメント

コメントはありません

コメントを投稿

コメントを投稿するにはログインが必要です