Safer cache key generation

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import md5
from django.conf import settings
def safe_cache_key(value):
    '''Returns an md5 hexdigest of value if len(value) > 250. Replaces invalid memcache
       control characters with an underscore. Also adds the CACHE_MIDDLEWARE_KEY_PREFIX
       to your keys automatically.
    '''
    for char in value:
      if ord(char) < 33:
          value = value.replace(char, '_')
    
    value = "%s_%s" % (settings.CACHE_MIDDLEWARE_KEY_PREFIX, value)
    
    if len(value) <= 250:
        return value
    
    return md5.new(value).hexdigest()

More like this

  1. Scalable and invalidateble cache_page decorator by marinho 3 years ago
  2. MintCache (simple version) by disqus 3 years, 11 months ago
  3. MintCache by gfranxman 5 years, 1 month ago
  4. Using another memcached for sessions by dipankarsarkar 3 years, 6 months ago
  5. Model manager with row caching by jobs@flowgram.com 3 years, 11 months ago

Comments

pigletto (on November 24, 2008):

I was looking for this kind of cache key generator for memcached recently and here it is :)

One thing that might be considered when using this snippet is to replace md5 by hashlib library if you tend to use newer python version (md5 is deprecated in python2.5).

#

bthomas (on December 18, 2008):

Actually, you can use django.utils.hashcompat.md5_constructor, which will use hashlib when available, and fallback to the old md5 import. The last line would be md5_constructor(value).digest()

#

(Forgotten your password?)