What is a valid key?
Steven Grimm
sgrimm at facebook.com
Wed Dec 19 18:36:56 UTC 2007
In my opinion:
A key can be up to 250 bytes. It may not contain:
null (0x00)
space (0x20)
tab (0x09)
newline (0x0a)
carriage-return (0x0d)
Beyond that, memcached shouldn't care. If your keys are UTF-8, fine.
If not, fine -- just so long as they don't exceed 250 bytes, memcached
will just treat them as binary blobs.
UTF-8, for those who don't know, cannot introduce any of the above
forbidden characters as part of its multibyte sequences. The bytes in
a UTF-8 sequence are always in the 0x80-0xFF range (actually more
restricted than that.)
UTF-16 or UTF-32 would likely cause problems, but that's fine -- the
rules above, being based on raw bytes, will pretty much imply that.
-Steve
On Dec 19, 2007, at 10:30 AM, Dustin Sallings wrote:
>
> I just got a bug report for my client regarding multibyte
> characters within a key. In order to fix it, I need to know what
> *should* be allowed in a key.
>
> The protocol document is fairly vague as far as what makes up a
> key. It says some specific characters that *aren't* valid, but
> seems to have been written with an ASCII mindset.
>
> In the binary protocol, we have a lot of freedom, but that freedom
> doesn't extend to the text protocol.
>
> Should we constrain keys to ASCII, or force clients to understand
> UTF-8 (or some other specific encoding)?
>
> --
> Dustin Sallings
>
More information about the memcached
mailing list