Please use github’s issue tracker to report bugs. Contact the authors at @jmoiron and @finder83 .

Johnny Cache is a caching framework for django applications. It works with the django caching abstraction, but was developed specifically with the use of memcached in mind. Its main feature is a patch on Django’s ORM that automatically caches all reads in a consistent manner. It works with Django 1.1 thru 1.4 and python 2.4 thru 2.7.

A typical settings.py file for Django 1.3 or 1.4 configured for johnny-cache :

# add johnny's middleware MIDDLEWARE_CLASSES = ( 'johnny.middleware.LocalStoreClearMiddleware' , 'johnny.middleware.QueryCacheMiddleware' , # ... ) # some johnny settings CACHES = { 'default' : dict ( BACKEND = 'johnny.backends.memcached.MemcachedCache' , LOCATION = [ '127.0.0.1:11211' ], JOHNNY_CACHE = True , ) } JOHNNY_MIDDLEWARE_KEY_PREFIX = 'jc_myproj'

For a full inspection of options for earlier versions of Django please see the queryset cache docs.

The MIDDLEWARE_CLASSES setting enables two middlewares: the outer one clears a thread-local dict-like cache located at johnny.cache.local at the end of every request, and should really be the outer most middleware in your stack. The second one enables the main feature of Johnny: the queryset cache.

The CACHES configuration includes a custom backend, which allows cache times of “0” to be interpreted as “forever”, and marks the default cache backend as the one Johnny will use.

Finally, the project’s name is worked into the Johnny key prefix so that if other projects are run using the same cache pool, Johnny won’t confuse the cache for one project with the cache for another.

With these settings, all of your ORM queries are now cached. You should read the queryset cache documentation closely to see if you are doing anything that might require manual invalidation.

Johnny does not define any views, urls, or models, so we can skip adding it to INSTALLED_APPS .

Note: Since Johnny is enabled by the inclusion of middleware, it will not be enabled by default in scripts, management commands, asynchronous workers, or the django shell. See the queryset cache documentation for instructions on how to enable it in these cases.

New in this version¶ Django 1.4 support

Redis backend (requires django-redis-cache )

) Master/Slave support

Cache whitelist

New celery task utilities

Version Numbering¶ Because Johnny tracks Django’s release schedule with its own releases, and is itself a mature project, the version number has been bumped from 0.3 to 1.4 to coincide with the highest version of Django with support. In the future, Johnny’s version will track the major and minor version numbers of Django, but will have independent dot releases for bugfixes, maintenance, and backwards compatible feature enhancements.