# coding=utf-8 """ @project: MaxKB @Author:虎 @file: cache_util.py @date:2024/7/24 19:23 @desc: """ from django.core.cache import cache def get_data_by_default_cache(key: str, get_data, cache_instance=cache, version=None, kwargs=None): """ 获取数据, 先从缓存中获取,如果获取不到再调用get_data 获取数据 @param kwargs: get_data所需参数 @param key: key @param get_data: 获取数据函数 @param cache_instance: cache实例 @param version: 版本用于隔离 @return: """ if kwargs is None: kwargs = {} if cache_instance.has_key(key, version=version): return cache_instance.get(key, version=version) data = get_data(**kwargs) cache_instance.add(key, data, version=version) return data def set_data_by_default_cache(key: str, get_data, cache_instance=cache, version=None): data = get_data() cache_instance.set(key, data, version=version) return data def get_cache(cache_key, use_get_data: any = True, cache_instance=cache, version=None): def inner(get_data): def run(*args, **kwargs): key = cache_key(*args, **kwargs) if callable(cache_key) else cache_key is_use_get_data = use_get_data(*args, **kwargs) if callable(use_get_data) else use_get_data if is_use_get_data: if cache_instance.has_key(key, version=version): return cache_instance.get(key, version=version) data = get_data(*args, **kwargs) cache_instance.add(key, data, timeout=None, version=version) return data data = get_data(*args, **kwargs) cache_instance.set(key, data, timeout=None, version=version) return data return run return inner def del_cache(cache_key, cache_instance=cache, version=None): def inner(func): def run(*args, **kwargs): key = cache_key(*args, **kwargs) if callable(cache_key) else cache_key func(*args, **kwargs) cache_instance.delete(key, version=version) return run return inner