NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #2852 most downloaded on PyPI
A slick ORM cache with automatic granular event-driven invalidation for Django.
Last release 1 years ago
20 Apr 2025
Ships fairly regularly
a new release about every 6 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
15 years old
64 releases · first in 2011
support and test against Python 3.13 and Django 5.1/5.2 (thx to Stu Tomlinson)
support and test against Python 3.12 and Django 5.0
One column per quarter.
fixed big memory usage during migrations
made it work with Redis 6.x and older again
made join invalidation more granular Backwards incompatible changes:
support Python 3.11 and Django 4.1
invalidate_m2o for polymorphic models (#430) (Andrey Alekseev)support Django 3.2 and 4.0 (thx to Olivér Kecskeméty)
do not fetch deferred fields during invalidation, fixes #387 Backwards incompatible changes:
DatabaseError on transaction cleanup (Roman Gorbil)extra param, including type, now behaves differentlysupport subqueries in annotations (Jeremy Stretch)
fixed reverse o2o invalidation (thx to John Anderson)
fixed custom manager derived from BaseManager (Eric Plaster) Backwards incompatible changes:
added keep_fresh option to @cached_as (George Lee)
use UNLINK instead of DEL when available, use Redis 4.0+ for that
fixed RawSQL() and Subquery() (thx to thakryptex)
fixed m2m invalidation issue with certain configs
fixed db selection in invalidation fetch and .invalidated_update() when router fails (M1ha Shvn)
fixed caching while app registry not ready
configure via Sentinel (Tapo4ek)
fixed caching django migrations
do not prevent fast path deletes on not cached models
minor optimizations Backwards incompatible changes:
fixed CACHEOPS_DEGRADE_ON_FAILURE=True
preliminary support for Django 2.0
fixed on commit sequence issue (thx to Irae Hueck Costa)
fixed querysets with custom .iterator() (like django-polymorphic)
fixed unexpected dirty transaction
added locking to combat dog-pile effect
support Django 1.10 (worked before, but now it's official)
no_invalidation optimizations Backwards incompatible changes:
backport: disabled cacheops for fake migration models
fixed .get() on reverse fk related manager
fixed .values() and .values_list() in Django 1.9
export FileCache and RedisCache from cacheops
added @decorator_tag to easily create cached template tags
made cacheops invalidate before other post_* signals (Emil Stenström)
updated support for Django 1.8 (Andriy Sokolovskiy)
Django 1.8 support and preliminary Django 1.9 support
fixed ops = 'all' both in config and .cache()
switched to new CACHEOPS setting style
fixed bug with null geometry fields
fixed deprecation warning in Django 1.6 admin
fixed StringifyError on timedelta (mpyatishev) Backwards incompatible changes:
fixed bug with schemes unsync when invalidating model Backwards incompatible changes:
optimizations for python 3 Backwards incompatible changes:
set six minimum version right (crazyzubr)
- Python 3 support
fixed Django 1.5- compatibility (aykutozat)
fixed caching querysets combined with | and & operators
added db_agnostic option to cache profile
fixed .inplace() altering cache key
.delete() method for simple cache
defend against model changes corrupting cache (ttyS15)
- fixed file cache md5 reference
support isnull lookup for better invalidation
file cache default dir changed to /tmp/cacheops_file_cache
support gracefull degradation on redis fail (Beres Botond)
- support for proxy models
fixed occasional redis 100% cpu use (tumb1er)
invalidate and cleanfilecache commands added to dist
compatability with latest redis-py
... lost in ancient history ...
Your coding agent can read these notes before it upgrades. Set up the MCP server →