We have been working on some optimizations on the backend lately, and one thing discussed was a new approach at handling caching. Django offers several, none of which satisfy what a heavy database site needs, and calling cache.get() everywhere is just tiresome, and ends up with data duplication. Today we came up with our tentative alternative, CacheManager. from django.db.models.manager import Manager from django.db.models.query import QuerySet from django.core.cache import cache DEFAULT_CACHE_TIME = 15 * 60 # 15 minutes # TODO # - Come up with a better method for invalidation # - Add invalidation for count() when a queryset is invalidated # - Find a way to make AutoCacheManager override `objects` in models # - Add some handling to allow CacheManager to react differently based on query type (get, count, filter, select_related) # CacheManager -- A manager to store and retrieve cached objects using CACHE_BACKEND # (Optional) <string key_prefix> -- the key prefix for all cached objects...