run_command() Perl binding

Timo Ewalds timo at tzc.com
Fri Nov 9 16:26:01 UTC 2007


Tomash Brechko wrote:
> In current text protocol there's no way to know the size of the reply,
> and command replies vary.  Once run_command() is a generic interface,
> it should be possible to call it for any command.  But
>
>   run_command("get foo\r\n");
>
> may contain _any_ character sequence in the reply, including "END" and
> friends.  And if run_command() will be made aware of the protocol
> details, it won't be generic and forward compatible any longer.  In
> other words, it's impossible to write a transparent proxy with current
> protocol.
>
> Given that it's broken anyway, shouldn't we deprecate it, and remove
> in the future?
>   

I wrote a memcache proxy a while ago, and you're right, it does need to 
understand the protocol. It really wasn't that hard to write though, 
since the protocol is so simple. I wrote it in php in a day as a proof 
of concept, event based, complete with connection sharing and request 
pipelining, and possibly request combining (ie several gets combined to 
one multi-get). I think it may even have done the hashing itself, so 
from the clients perspective, we'd just have one memcached server. 
Despite being only a proof of concept, written in php and needing to 
know the protocol, it turned out to be surprisingly fast. If we ever get 
to the point that we need too many persistent connections for memcached 
to handle, and for some reason we reject the udp protocol, I wouldn't 
hesitate to revive that project, and possibly even put the php version 
live for a couple days/weeks while we rewrite it in C (ie so we can use 
epoll instead of select, can do fewer memory copies, faster, etc).

Timo



More information about the memcached mailing list