Cache#
- class Cache(max_cache_size, max_key_length)#
Bases:
dict
[Hashable
,Any
]In-memory bounded-size cache for key-value pairs with limited key lengths.
- This cache:
Limits the total number of items (
max_cache_size
).Skips keys whose length (
len(key)
) exceedsmax_key_length
.When full, evicts the entry with the longest key if the incoming key is shorter.
Notes
Keys must be hashable. If a key has no length (i.e.,
len(key)
raisesTypeError
), it is ignored (not cached).Updating an existing key always succeeds (no eviction), even when the cache is full.
Example
>>> cache = Cache(max_cache_size=3, max_key_length=5) >>> cache['abc'] = 1 >>> cache['def'] = 2 >>> cache['ghi'] = 3 >>> cache['abcdef'] = 4 # ignored: key too long >>> list(cache.items()) [('abc', 1), ('def', 2), ('ghi', 3)]
- Parameters:
max_cache_size (int)
max_key_length (int)
- max_cache_size#
Maximum number of entries the cache can hold (<=0 disables caching).
- Type:
int
- max_key_length#
Maximum allowed length of any key.
- Type:
int
- __init__(max_cache_size, max_key_length)#
Initialize the cache.
- Parameters:
max_cache_size (int) – Maximum entries to retain; if <= 0, all insertions are ignored.
max_key_length (int) – Maximum allowed length of any key.
- Return type:
None
Methods
__init__
(max_cache_size, max_key_length)Initialize the cache.
clear
()copy
()fromkeys
(iterable[, value])Create a new dictionary with keys from iterable and values set to value.
get
(key[, default])Return the value for key if key is in the dictionary, else default.
items
()keys
()pop
(k[,d])If the key is not found, return the default if given; otherwise, raise a KeyError.
popitem
()Remove and return a (key, value) pair as a 2-tuple.
setdefault
(key[, default])Insert key with a value of default if key is not in the dictionary.
update
([E, ]**F)If E is present and has a .keys() method, then does: for k in E.keys(): D[k] = E[k] If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v In either case, this is followed by: for k in F: D[k] = F[k]
values
()- clear() None. Remove all items from D. #
- copy() a shallow copy of D #
- classmethod fromkeys(iterable, value=None, /)#
Create a new dictionary with keys from iterable and values set to value.
- get(key, default=None, /)#
Return the value for key if key is in the dictionary, else default.
- items() a set-like object providing a view on D's items #
- keys() a set-like object providing a view on D's keys #
- pop(k[, d]) v, remove specified key and return the corresponding value. #
If the key is not found, return the default if given; otherwise, raise a KeyError.
- popitem()#
Remove and return a (key, value) pair as a 2-tuple.
Pairs are returned in LIFO (last-in, first-out) order. Raises KeyError if the dict is empty.
- setdefault(key, default=None, /)#
Insert key with a value of default if key is not in the dictionary.
Return the value for key if key is in the dictionary, else default.
- update([E, ]**F) None. Update D from mapping/iterable E and F. #
If E is present and has a .keys() method, then does: for k in E.keys(): D[k] = E[k] If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v In either case, this is followed by: for k in F: D[k] = F[k]
- values() an object providing a view on D's values #