#example from django.core.cache import cache cache.set('hello_19374', 'some value here') # will set the key hello_19374 to 'some value here' cache.set('hello_xfhh', 'some value here') # etc cache.set('19374hello', 'some value here') # etc cache.set('alal_hello_19374', 'some value here') # etc cache.set('lalahellohdgf', 'some value here') # etc print cache.filter('hello%') # will show all keys beginning with 'hello' print cache.filter('%%') # will show all keys print cache.filter('%hello') # will show all keys ending with 'hello' print cache.filter('%hello%') # will show all keys containing 'hello' cache.clean() # will delete any cache entries which have past their expiry #app/settings.py CACHE_BACKEND = 'app.cache://cache_table_name_goes_here' #app/cache.py "Database cache backend." from django.core.cache.backends.db import CacheClass as _CacheClass from django.core.cache.backends.base import BaseCache from django.db import connection, transaction, DatabaseError import base64, time from datetime import datetime try: import cPickle as pickle except ImportError: import pickle # Import the threading and time import threading def RoutineCacheClean(): # Import the cache from django.core.cache import cache # Loop forever! while True: # Clean it! try: cache.clean() except: pass # Clean every 3 minutes time.sleep(60*3) def StartCacheClean(): # Create the new thread t = threading.Thread( target = RoutineCacheClean ) # Set the thread daemon flag to true t.setDaemon(True) # Start the thread t.start() class CacheClass ( _CacheClass ): def filter(self, key, default=None): lx={} cursor = connection.cursor() cursor.execute("SELECT cache_key, value, expires FROM %s WHERE cache_key LIKE %%s" % self._table, [key]) for row in cursor.fetchall(): if row is not None: now = datetime.now() if row[2] < now: cursor.execute("DELETE FROM %s WHERE cache_key = %%s" % self._table, [row[0]]) transaction.commit_unless_managed() else: value = connection.ops.process_clob(row[1]) lx[row[0]]=pickle.loads(base64.decodestring(value)) return lx def clean(self): cursor = connection.cursor() now = datetime.now().replace(microsecond=0) cursor.execute("DELETE FROM %s WHERE expires < %%s" % self._table, [str(now)]) transaction.commit_unless_managed() StartCacheClean()