- 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.
- 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
.
- 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 withmaxsize=None
likeCache(maxsize=None)
. Thanks AllinolCP! - Fix bug in
Cache.get_many
that resulted inRuntimeError: OrderedDict mutated during iteration
when cache keys expire during theget_many
call. - Remove
default
argument fromCache.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 theget_many
call. breaking change
- Fix regression in
0.12.0
that resulted in missing docstrings for some methods ofLFUCache
andLRUCache
.
- Fix bug in
Cache.__contains__
where it would returnTrue
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 beyondmaxsize
limit.
- 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.
- Expose
typed
argument of underlying*Cache.memoize()
inmemoize()
and*_memoize()
decorators.
- Fix bug in
LRUCache.get()
where supplying adefault
value would result in aKeyError
.
- Support Python 3.7.
- Modify behavior of
default
argument toCache.get()
so that ifdefault
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 toCache()
that can be used to override the value fordefault
inCache.get()
.
- Merge functionality of
Cache.get_many_by()
intoCache.get_many()
and removeCache.get_many_by()
. (breaking change). - Merge functionality of
Cache.delete_many_by()
intoCache.delete_many()
and removeCache.delete_many_by()
. (breaking change).
- Add
Cache.get_many_by()
. - Add
Cache.delete_many_by()
. - Make
Cache.keys()
andCache.values()
return dictionary view objects instead of yielding items. (breaking change)
- Changed default cache
maxsize
from300
to256
. (breaking change) - Add
Cache.memoize()
decorator. - Add standalone memoization decorators:
memoize
fifo_memoize
lfu_memoize
lifo_memoize
lru_memoize
mru_memoize
rr_memoize
- Add
LIFOCache
- Add
FIFOCache
as an alias ofCache
.
- Add
LFUCache
- Delete expired items before popping an item in
Cache.popitem()
.
- Add
MRUCache
- Add
RRCache
- Add
Cache.popitem()
. - Rename
Cache.expirations()
toCache.expire_times()
. (breaking change) - Rename
Cache.count()
toCache.size()
. (breaking change) - Remove
minimum
arguement fromCache.evict()
. (breaking change)
- 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__()
andCache.__contains__()
.
- Rename
Cache.setup()
toCache.configure()
. (breaking change) - Add
CacheManager
class.
- Add
Cache
class.