Reserved memcached key namespace
Marc
Marc at facebook.com
Wed May 2 19:08:03 UTC 2007
Lately it seems to me that it would be a lot easier to add features and keep
clients small and simple if we used a reserved part of the memcached key
namespace for admin and status operations. Consider stats, version,
flush_all and flush_regex. Rather than implementing a new message format,
one would simply set or get keys from the reserved namespace.
quit\r\n
becomes:
set __quit__ 0 0\r\n\r\n =>
<= STORED\r\n
version\r\n
becomes:
get __version__\r\n =>
<= VALUE __version__ 0 9\r\n1.2.0-rc1\r\nEND\r\n
For something like stats, there should be a key whose value is all the stat
keys recognized by that server. Ie
get __stat_keys__\r\n =>
<= VALUE __stat_keys__ 0 329\r\n__pid__ __uptime__...\r\nEND\r\n
One could then mget some or all stats:
get __pid__ __uptime__ __time__\r\n
For multiparameter admin command like 'stats cachedump' some standard
parameter delimiter syntax can be used. Ie
get __cachedump__?id&limit\r\n
This could be done very efficiently on the server side. Basically once the
reserved prefix is identified, just tokenize the key and fork off to the
existing stats/admin command handling functions. They'd have to be tweaked
somewhat for the new format. The main thing would be to documents required
and optional well-known keys in the protocol spec.
I'm interested in prototyping this. I wanted to get a sense of people's
interest and if there are any obvious choices for a reserved-key
prefix/suffix that won't conflict with current installations.
More information about the memcached
mailing list