Lightweight in-memory cache with TTL, LRU eviction, and tag-based invalidation
Project description
philiprehberger-cache-kit
Lightweight in-memory cache with TTL, LRU eviction, and tag-based invalidation.
Installation
pip install philiprehberger-cache-kit
Usage
Basic Cache
from philiprehberger_cache_kit import Cache
cache: Cache[str] = Cache(max_size=1000)
cache.set("key", "value")
print(cache.get("key")) # "value"
TTL (Time-to-Live)
cache = Cache(default_ttl=60.0) # 60 seconds default
cache.set("session", "abc123") # uses default TTL
cache.set("temp", "data", ttl=5.0) # expires in 5 seconds
cache.set("permanent", "data", ttl=None) # no expiry when default is set
LRU Eviction
cache = Cache(max_size=100)
# When full, least recently used entries are evicted first
# Expired entries are evicted before non-expired ones
for i in range(200):
cache.set(f"key-{i}", f"value-{i}")
print(cache.size) # 100
Tag-Based Invalidation
cache.set("user:1", user_data, tags={"users", "team-a"})
cache.set("user:2", user_data, tags={"users", "team-b"})
cache.set("post:1", post_data, tags={"posts", "team-a"})
# Invalidate all entries tagged "team-a"
removed = cache.invalidate_by_tag("team-a")
print(removed) # 2
Batch Operations
# Set multiple entries at once
cache.set_many({"a": 1, "b": 2, "c": 3}, ttl=30.0)
# Get multiple entries at once (skips missing/expired)
results = cache.get_many(["a", "b", "missing"])
print(results) # {"a": 1, "b": 2}
Cache Statistics
from philiprehberger_cache_kit import Cache, CacheStats
cache: Cache[str] = Cache(max_size=100)
cache.set("x", "hello")
cache.get("x") # hit
cache.get("missing") # miss
stats = cache.stats()
print(stats.hits) # 1
print(stats.misses) # 1
print(stats.hit_rate) # 0.5
print(stats.evictions) # 0
print(stats.expired) # 0
cache.reset_stats() # zero out all counters
Other Operations
cache.has("key") # check existence
"key" in cache # same as has()
cache.delete("key") # delete single entry
cache.keys() # list all non-expired keys
len(cache) # count of non-expired entries
cache.get_entry("key") # get CacheEntry with tags, expires_at
cache.clear() # remove everything
API
| Function / Class | Description |
|---|---|
Cache(max_size=1000, default_ttl=None) |
Create a new cache |
.set(key, value, ttl=None, tags=None) |
Store a value |
.get(key, default=None) |
Retrieve a value |
.get_many(keys) |
Retrieve multiple values, skip missing/expired |
.set_many(items, ttl=None) |
Store multiple values |
.has(key) |
Check if key exists and is not expired |
.delete(key) |
Remove a key |
.invalidate_by_tag(tag) |
Remove all entries with a tag |
.clear() |
Remove all entries |
.keys() |
List non-expired keys |
.get_entry(key) |
Get CacheEntry object (value, expires_at, tags) |
.stats() |
Get CacheStats (hits, misses, evictions, expired, hit_rate) |
.reset_stats() |
Zero out all stat counters |
.size |
Number of stored entries |
len(cache) |
Number of non-expired entries |
key in cache |
Check key existence |
CacheStats |
Dataclass with hits, misses, evictions, expired, hit_rate |
Development
pip install -e .
python -m pytest tests/ -v
Support
If you find this package useful, consider giving it a star on GitHub — it helps motivate continued maintenance and development.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file philiprehberger_cache_kit-0.3.0.tar.gz.
File metadata
- Download URL: philiprehberger_cache_kit-0.3.0.tar.gz
- Upload date:
- Size: 7.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ea3b2e0bf5f06b1da0c3f0f1f5e4fad62b9572a75645974a38460865c8b68cb2
|
|
| MD5 |
ad95c5f27e9b31031e446218899f0172
|
|
| BLAKE2b-256 |
ba6b0ae068b72077f176f4ae2a3b7b2f6337062723b3d81cc8e6bbe21e4248bc
|
File details
Details for the file philiprehberger_cache_kit-0.3.0-py3-none-any.whl.
File metadata
- Download URL: philiprehberger_cache_kit-0.3.0-py3-none-any.whl
- Upload date:
- Size: 5.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
93481fe009876dc769f4a353bf49fb06af8a24965c9468090feba1c0f05a3b6e
|
|
| MD5 |
33a73d96524762b395632be3b4793c43
|
|
| BLAKE2b-256 |
72109aa24306ef837a03bf698f942f975e1a5210961bab7583935e1085b81887
|