NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
A caching library for Python
Last release today
03 Oct 2026
Release timing varies
gaps range from 8 days to 2.8 years
Nearly every release is documented
notes for 25 of 25 stable releases
Nothing withdrawn
no release was ever pulled
9 years old
25 releases · first in 2018
Apply cache replacement policy hooks during bulk writes. Thanks vitalivo_!
Apply cache replacement policy hooks during bulk writes. Thanks vitalivo_!
Respect an explicit zero timestamp in Cache.expired. Thanks vitalivo_!
Preserve argument boundaries when constructing memoization keys. Thanks vitalivo_!
Add Cache.on_get callback hook. Thanks uncle-lv_!
Add Cache.on_get callback hook. Thanks uncle-lv_!
Add Cache.on_set callback hook. Thanks uncle-lv_!
One column per quarter.
Add cache statistics. Thanks uncle-lv_!
Add cache statistics. Thanks uncle-lv_!
Add Cache.get_ttl. Thanks uncle-lv_!
Add Cache.on_delete callback hook. Thanks uncle-lv_!
Add support for Python 3.11 and 3.12.
Set minimum Python version to 3.7 in setup.cfg.
Set minimum Python version to 3.7 in setup.cfg.
Drop support for Python 3.6. Minimum supported version is 3.7.
Add support for Python 3.10.
Drop support for Python 3.6. Minimum supported version is 3.7.
Clarify docs around TTL to make it explicit what time units it uses by default.
Minor optimization in Cache.get_many|delete_many.
Minor optimization in Cache.get_many|delete_many.
…happened to expire during the get_many call. breaking change
Add cache_key attribute to memoized functions that can be used to generate the cache key used for a given set of function arguments. Thanks johnbergvall_!
Fix bug in Cache.full that would result in an exception if cache created with maxsize=None like Cache(maxsize=None). Thanks AllinolCP_!
Fix bug in Cache.get_many that resulted in RuntimeError: OrderedDict mutated during iteration when cache keys expire during the get_many call.
Remove default argument from Cache.get_many. A default value on missing cache key was only ever returned if a list of keys was passed in and those keys happened to expire during the get_many call. breaking change
Fix regression in 0.12.0 that resulted in missing docstrings for some methods of LFUCache and LRUCache.
Fix regression in 0.12.0 that resulted in missing docstrings for some methods of LFUCache and LRUCache.
Fix bug in Cache.__contains__ where it would return True for an expired key.
Fix bug in Cache.__contains__ where it would return True for an expired key.
Add type annotations.
Add official support for Python 3.8 and 3.9.
Drop support for Python 3.4 and 3.5.
Fix bug in LFUCache that would result cache growing beyond maxsize limit.
Fix bug in LFUCache that would result cache growing beyond maxsize limit.
Fix issue with asyncio support in memoization decorators that caused a RuntimeError: await wasn't used with future when certain types of async functio
Fix issue with asyncio support in memoization decorators that caused a RuntimeError: await wasn't used with future when certain types of async functions were used inside the memoized function.
Add asyncio support to memoization decorators so they can decorate coroutines.
Add asyncio support to memoization decorators so they can decorate coroutines.
Expose typed argument of underlying *Cache.memoize() in memoize() and *_memoize() decorators.
Expose typed argument of underlying *Cache.memoize() in memoize() and *_memoize() decorators.
Fix bug in LRUCache.get() where supplying a default value would result in a KeyError.
Fix bug in LRUCache.get() where supplying a default value would result in a KeyError.
- Support Python 3.7.
Support Python 3.7.
…be set as the value for the key in the cache. (breaking change)
Modify behavior of default argument to Cache.get() so that if default is a callable and the cache key is missing, then it will be called and its return value will be used as the value for cache key and subsequently be set as the value for the key in the cache. (breaking change)
Add default argument to Cache() that can be used to override the value for default in Cache.get().
Merge functionality of Cache.get_many_by() into Cache.get_many() and remove Cache.get_many_by(). (breaking change).
Merge functionality of Cache.get_many_by() into Cache.get_many() and remove Cache.get_many_by(). (breaking change).
Merge functionality of Cache.delete_many_by() into Cache.delete_many() and remove Cache.delete_many_by(). (breaking change).
Make Cache.keys() and Cache.values() return dictionary view objects instead of yielding items. (breaking change)
Add Cache.get_many_by().
Add Cache.delete_many_by().
Make Cache.keys() and Cache.values() return dictionary view objects instead of yielding items. (breaking change)
Changed default cache maxsize from 300 to 256. (breaking change)
Changed default cache maxsize from 300 to 256. (breaking change)
Add Cache.memoize() decorator.
Add standalone memoization decorators:
memoize
fifo_memoize
lfu_memoize
lifo_memoize
lru_memoize
mru_memoize
rr_memoize
Add FIFOCache as an alias of Cache.
Add LIFOCache
Add FIFOCache as an alias of Cache.
Delete expired items before popping an item in Cache.popitem().
Add LFUCache
Delete expired items before popping an item in Cache.popitem().
Rename Cache.expirations() to Cache.expire_times(). (breaking change)
Add MRUCache
Add RRCache
Add Cache.popitem().
Rename Cache.expirations() to Cache.expire_times(). (breaking change)
Rename Cache.count() to Cache.size(). (breaking change)
Remove minimum arguement from Cache.evict(). (breaking change)
Make threading lock usage in Cache more fine-grained and eliminate redundant locking.
Add LRUCache.
Add CacheManager.__repr__().
Make threading lock usage in Cache more fine-grained and eliminate redundant locking.
Fix missing thread-safety in Cache.__len__() and Cache.__contains__().
Rename Cache.setup() to Cache.configure(). (breaking change)
Rename Cache.setup() to Cache.configure(). (breaking change)
Add CacheManager class.
.. _johnbergvall: https://github.com/johnbergvall .. _AllinolCP: https://github.com/AllinolCP .. _uncle-lv: https://github.com/uncle-lv .. _vitalivo:
Add Cache class.
Your coding agent can read these notes before it upgrades. Set up the MCP server →