Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

byscut/simple-function-cache

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Simple Function Cache

Cache model results decorator with redis.

Pypi address

https://pypi.org/project/simple-function-cache/

Latest version

0.0.4

Example

from simple_cache import build_cache

REDIS_CONFIG = {
    "host": "host of redis clusters",
    "port": 6379,
    "password": "password of redis clusters"
}
algo_model_cache = build_cache(db=99, config_json=REDIS_CONFIG)


if __name__ == '__main__':
    from hashlib import md5
    import json


    def content_md5(data):
        """计算data的MD5值,经过Base64编码并返回str类型。

        返回值可以直接作为HTTP Content-Type头部的值
        """
        if isinstance(data, str):
            data = data.encode(encoding='utf-8')

        m = md5(data)
        return m.hexdigest().upper()

    def key_calculate(model, data, namespace='production', **kwargs):
        data = json.dumps(data)
        return model + "_" + namespace + "_" + content_md5(data)

    def condition(model_result, model, data, namespace='production', **kwargs):
        if model_result.get('status', '') == 'SUCCESS':
            return True
        return False

    @algo_model_cache(cache_name="test", cache_mode='cache', expire=60, key_func=key_calculate, cache_condition_func=condition)
    def cache_function(cached_func, data, namespace='production', **kwargs):
        """算法"""
        model_result = cached_func(data, namespace)
        return model_result
    
    def func(data, namespace):
        data["result"] = "model_result"
        data["namespace"] = "namespace"
        return data

    input_data = {
        "task_id": "test_cache",
        "data": {
            "curtain_size": [
                1280,
                720
            ]
        }
    }

    result = cache_function(func, data=input_data, namespace='dev')
    print(result)

Download and setup

pip install simple-function-cache -i https://pypi.python.org/pypi

Environment requirement: python>=3.7

Initialization

直接通过引入build_cache函数进行初始化,build_cache参数为(db, config_json=None)。db为所选redis的库名,config_json接受包括键为host,port,password的dict数据,安全起见不再提供默认连接。 例如:

algo_model_cache = build_cache(db=99, config_json={xxx})

注意:初始化仅在项目第一次引入时有效。同一个项目中,后续如需修改连接配置需要手动调用RedisSingleton中的清除实例操作,否则会始终调用到之前初始化的单例连接,导致传新的参数不生效。

Cache Decorator params

param type description
cache_mode string 该参数决定装饰器装饰的函数是使用哪种缓存方式:cache、no_cache、refresh;
cache_name string 装饰器名字,用在缓存key值计算方式和缓存调用次数统计上
key_func function key值计算函数:输入和被装饰的函数一致,输出是一个字符串
cache_condition_func function 决定是否要对结果进行缓存的函数,输入为被装饰函数的结果+被装饰函数的输入拼接的列表,输出为bool值,默认为始终返回true
expire int 缓存数据过期时间,单位为秒,默认3天

Reserved param in decorated function

param type description
namespace string 表示被装饰函数的执行环境,默认值为None
cache_mode_ string 用于动态修改被装饰函数当前执行的cache_mode,强制覆盖装饰器参数,默认值为None

About

cache function results by decorator with redis.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.