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 python-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.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-py3-none-any.whl (4.8 kB view details)

Uploaded Python 3

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

Hashes for parametric-ttl-cache-1.0.tar.gz
Algorithm Hash digest
SHA256 f67eb853c192acf0f2a70ade1f8a2c1b34c632a84db4290407ee065eabc2923a
MD5 9351fcfcd0e9f63559c58006ed1a28ea
BLAKE2b-256 6b473c905913d228563dc8acc6c75aa8fec65a63da8a564bb33bf22b99671a25

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for parametric_ttl_cache-1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 659a46cc5d747ee1ebc08bbbea56bd51f768b2d13ba072cf13252993a046b5f2
MD5 0bf5cab0845c8d6a9964f89e9ddf2ab7
BLAKE2b-256 5262ae864b875bcee69110411c50665bda275511384ab90950982928b23d4221

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