Skip to main content

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:

  1. Install the package using pip install parametric-ttl-cache.
  2. Import the TtlCache class from parametric_ttl_cache.ttl_cache import TtlCache.
  3. Add the @TtlCache(ttl=seconds) decorator to the function you want to cache.
  4. Cache keys are generated in the format "{class_name.}method_name(param1=value1, param2=value2, ...)".
  5. To call the member functions of TtlCache, create an instance of TtlCache and 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

parametric-ttl-cache-1.0.1.tar.gz (4.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

parametric_ttl_cache-1.0.1-py3-none-any.whl (4.8 kB view details)

Uploaded Python 3

File details

Details for the file parametric-ttl-cache-1.0.1.tar.gz.

File metadata

  • Download URL: parametric-ttl-cache-1.0.1.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

Hashes for parametric-ttl-cache-1.0.1.tar.gz
Algorithm Hash digest
SHA256 c5ac34cba293a1d635f919f094e3b8b46d3bf059a8f6692561916a917caa7ef9
MD5 afb9166560465cbdbf65465848936957
BLAKE2b-256 0cb15b4784d7c7dbe14b44702559a2f7e41cd49ee2711f2e1d547ec653a26a40

See more details on using hashes here.

File details

Details for the file parametric_ttl_cache-1.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for parametric_ttl_cache-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 31500439e393c13f5c4115cb47c8064df5ba79fbf313c25b65bce9906974e991
MD5 749a5af3808e5a67fc14f079620351c6
BLAKE2b-256 f30e14d23e89cd55489fb36851904fbe9e9f106f8e5825f27d04e4c65a2c060f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page