Клиенты Memcached, похоже, не проверяют ключи в пользу производительности.
Обычно я создаю метод с именем createWellFormedKey($key)
и передаю возвращенный результат в методы set()
и get()
клиента memcached.
Я не использую хэширование md5 и sha1, если версия base64 не превышает 250 символов. Это связано с тем, что md5 и sha1 являются более дорогими в плане производительности операций.
Пример кода PHP выглядит следующим образом:
/**
* Generates a well formed key using the following algorithm:
* 1. base64_encode the key first to make sure all characters are valid
* 2. Check length of result, less than 250 then return it
* 3. Length of result more than 250 then create a key that is md5($validKey).sha1($validKey).strlen($validKey)
*/
private function createWellFormedKey($key) {
// Get rid of all spaces, control characters, etc using base64
$validKey = base64_encode($key);
$validKeyLength = strlen($validKey);
// 250 is the maximum memcached can handle
if (strlen($validKey) < 250) {
return $validKey;
}
$validKey = md5($validKey).sha1($validKey).$validKeyLength;
return $validKey;
}