Source code for akvo.cache.memcache

from typing import List

from pymemcache.serde import python_memcache_deserializer
from pymemcache.serde import python_memcache_serializer
from django.core.cache.backends.memcached import PyMemcacheCache


[docs]class AkvoMemcachedCache(PyMemcacheCache): def __init__(self, server, params): super().__init__(server, params) self._options = { 'serializer': python_memcache_serializer, 'deserializer': python_memcache_deserializer, **self._options, }
[docs] def list_keys(self) -> List[str]: """ List all keys in memcached Implementation of https://www.darkcoding.net/software/memcached-list-all-keys/ """ keys = [] for client in self._cache.clients.values(): slab_keys = set() items = client.stats('items') for item in items.keys(): slab = item.decode('ascii').split(':') slab_keys.add(slab[1]) for slab_key in slab_keys: data = client.stats('cachedump', str(slab_key), '10000') for raw_key in data.keys(): # raw_key format "%s:%s:%s" (django.core.cache.backends.base.default_key_func) key = raw_key.decode('ascii').split(':', 2) if len(key) < 3: continue keys.append(key[2]) return keys