MemcachedKeyLengthError: Key length is > 250
Photo by Photos Hobby on Unsplash
Lately I was getting this error frequently as I was using Django's built in cache_page decorator to cache some views.
memcache in check_key
MemcachedKeyLengthError: Key length is > 250
Basically the problem is that Memcached only allows a 250 char key and some of my view names were pretty long and so it was creating keys greater than 250 chars.
I found a quick fix to hash the key with an md5 hash if the key is going to be over 250 characters. You can modify the function that creates the key.
In my settings file I added the following:
import hashlib
...
def hash_key(key, key_prefix, version):
new_key = ':'.join([key_prefix, str(version), key])
if len(new_key) > 250:
m = hashlib.md5()
m.update(new_key)
new_key = m.hexdigest()
return new_key
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
'KEY_FUNCTION': hash_key,
}
}
The reason why I only hash if the key is going to be over 250 characters is because 1) hashing is CPU intensive and I only want to do it when I have to; 2) I prefer to have my memcached keys human readable when possible; 3) less likely to have collision problems with duplicate hashes.
I thank Russell Keith-Magee for these tips.