A function-level memory cache that supports Time To Live (TTL)
Project description
TTL Cache
A function-level memory cache that supports Time To Live (TTL).
- Per-function argument caching: Caching is possible based on the data passed to function arguments. The cache key is composed of the function name, argument names, and the values of the arguments.
- Automatic expiration: Cached data expires and is automatically deleted after the specified TTL (in seconds).
- LRU policy: When the cache exceeds its maximum size (
max_size), the Least Recently Used (LRU) policy is applied to delete items. - Easy application: Simply add the
@TtlCache(ttl=seconds)decorator to the function you want to cache.
Parameters:
- ttl: TTL for the cached data (in seconds).
- max_size: Maximum number of cache entries.
- applying_params: List of parameter names to use as the cache key. If
None, all parameters are used. If[], only the function name is used.
Member Functions:
- force_expire(key): Forces expiration of the cache entry for the specified key.
- is_exist(key): Checks if a specific key exists in the cache.
- get_item(key): Returns the cache item for the specified key.
- Note: The key can include partial elements of the cache key.
Usage:
- Install the package using
pip install python-ttl-cache. - Import the
TtlCacheclassfrom parametric_ttl_cache.ttl_cache import TtlCache. - Add the
@TtlCache(ttl=seconds)decorator to the function you want to cache. - Cache keys are generated in the format
"{class_name.}method_name(param1=value1, param2=value2, ...)". - To call the member functions of
TtlCache, create an instance ofTtlCacheand use that instance as the decorator.
Source code installation:
git clone https://github.com/jogakdal/python_ttl_cache.git
cd python_ttl_cache
pip install -r requirements.txt
Example:
from parametric_ttl_cache.ttl_cache import TtlCache
some_cache = TtlCache(ttl=5)
@some_cache
def some_function(x):
return x * 2
@TtlCache(ttl=5, max_size=10, applying_params=['key'])
def another_function(key, value):
return f'{key} = {value}'
# Usage
result = some_function(1)
some_cache.force_expire('some_function(x=1)')
Test:
import unittest
import time
from parametric_ttl_cache.ttl_cache import TtlCache
class TestTtlCache(unittest.TestCase):
__increment = 0
def test_ttl_cache(self):
ttl = 2 # 2 seconds
cache = TtlCache(ttl)
def incrementer():
self.__increment += 1
return self.__increment
@cache
def func(x=1):
return x + incrementer()
self.assertEqual(func(1), 2, '첫 번 째 호출은 정상적으로 실행')
self.assertEqual(func(1), 2, '두 번 째 호출은 캐시에서 가져와야 하고 incrementer가 호출되지 않아야 함')
self.assertEqual(func(x=1), 2, '명시적인 키워드 인자도 동일한 캐시 키로 사용되어야 함')
self.assertEqual(func(), 2, '디폴트 인자와 캐시 키로 사용된 인자가 같으면 같은 캐시 키로 취급되어야 함')
self.assertEqual(func(2), 4, '인자가 다르면 다른 캐시가 생성되어야 함')
# 캐시 expire
time.sleep(ttl + 1)
self.assertEqual(func(1), 4, '캐시가 expire 되었으므로 incrementer가 호출되어야 함')
self.assertEqual(func(1), 4, '이 전 호출에서 캐시가 다시 생성되어야 함')
# 캐시 강제 expire
cache.force_expire('x=1')
self.assertEqual(func(1), 5, '강제로 캐시를 expire시키면 incrementer가 호출되어야 함')
if __name__ == '__main__':
unittest.main()
Project details
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 parametric-ttl-cache-1.0.tar.gz.
File metadata
- Download URL: parametric-ttl-cache-1.0.tar.gz
- Upload date:
- Size: 4.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f67eb853c192acf0f2a70ade1f8a2c1b34c632a84db4290407ee065eabc2923a
|
|
| MD5 |
9351fcfcd0e9f63559c58006ed1a28ea
|
|
| BLAKE2b-256 |
6b473c905913d228563dc8acc6c75aa8fec65a63da8a564bb33bf22b99671a25
|
File details
Details for the file parametric_ttl_cache-1.0-py3-none-any.whl.
File metadata
- Download URL: parametric_ttl_cache-1.0-py3-none-any.whl
- Upload date:
- Size: 4.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
659a46cc5d747ee1ebc08bbbea56bd51f768b2d13ba072cf13252993a046b5f2
|
|
| MD5 |
0bf5cab0845c8d6a9964f89e9ddf2ab7
|
|
| BLAKE2b-256 |
5262ae864b875bcee69110411c50665bda275511384ab90950982928b23d4221
|