From 6f284420d6266b4e439f30fa4f12fed0b74b06b2 Mon Sep 17 00:00:00 2001 From: shaohuzhang1 Date: Wed, 30 Oct 2024 18:07:28 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=A4=9Awork=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E6=95=B0=E6=8D=AE=E4=B8=8D=E5=90=8C=E6=AD=A5=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/common/cache/file_cache.py | 29 ++++++++++++++++++----------- apps/common/util/cache_util.py | 8 +++++--- apps/smartdoc/settings/base.py | 4 ++++ 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/apps/common/cache/file_cache.py b/apps/common/cache/file_cache.py index eb5ef0add..01f7ca13f 100644 --- a/apps/common/cache/file_cache.py +++ b/apps/common/cache/file_cache.py @@ -12,7 +12,7 @@ import os import time from diskcache import Cache -from django.core.cache.backends.base import DEFAULT_TIMEOUT, BaseCache +from django.core.cache.backends.base import BaseCache class FileCache(BaseCache): @@ -29,35 +29,42 @@ class FileCache(BaseCache): finally: os.umask(old_umask) - def add(self, key, value, timeout=DEFAULT_TIMEOUT, version=None): + def add(self, key, value, timeout=None, version=None): expire = timeout if isinstance(timeout, int) or isinstance(timeout, float) or timeout is None else timeout.total_seconds() - return self.cache.add(key, value=value, expire=expire) + return self.cache.add(self.get_key(key, version), value=value, expire=expire) - def set(self, key, value, timeout=DEFAULT_TIMEOUT, version=None): + def set(self, key, value, timeout=None, version=None): expire = timeout if isinstance(timeout, int) or isinstance(timeout, float) or timeout is None else timeout.total_seconds() - return self.cache.set(key, value=value, expire=expire) + return self.cache.set(self.get_key(key, version), value=value, expire=expire) def get(self, key, default=None, version=None): - return self.cache.get(key, default=default) + return self.cache.get(self.get_key(key, version), default=default) + + @staticmethod + def get_key(key, version): + if version is None: + return f"default:{key}" + return f"{version}:{key}" def delete(self, key, version=None): - return self.cache.delete(key) + return self.cache.delete(self.get_key(key, version)) - def touch(self, key, timeout=DEFAULT_TIMEOUT, version=None): + def touch(self, key, timeout=None, version=None): expire = timeout if isinstance(timeout, int) or isinstance(timeout, float) else timeout.total_seconds() - return self.cache.touch(key, expire=expire) + return self.cache.touch(self.get_key(key, version), expire=expire) - def ttl(self, key): + def ttl(self, key, version=None): """ 获取key的剩余时间 :param key: key :return: 剩余时间 + @param version: """ - value, expire_time = self.cache.get(key, expire_time=True) + value, expire_time = self.cache.get(self.get_key(key, version), expire_time=True) if value is None: return None return datetime.timedelta(seconds=math.ceil(expire_time - time.time())) diff --git a/apps/common/util/cache_util.py b/apps/common/util/cache_util.py index a206b5603..3d97a47cd 100644 --- a/apps/common/util/cache_util.py +++ b/apps/common/util/cache_util.py @@ -6,7 +6,9 @@ @date:2024/7/24 19:23 @desc: """ -from django.core.cache import cache +from django.core.cache import caches + +cache = caches['default_file'] def get_data_by_default_cache(key: str, get_data, cache_instance=cache, version=None, kwargs=None): @@ -43,10 +45,10 @@ def get_cache(cache_key, use_get_data: any = True, cache_instance=cache, version 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, version=version) + cache_instance.add(key, data, timeout=None, version=version) return data data = get_data(*args, **kwargs) - cache_instance.set(key, data, version=version) + cache_instance.set(key, data, timeout=None, version=version) return data return run diff --git a/apps/smartdoc/settings/base.py b/apps/smartdoc/settings/base.py index c6b21882e..81d74bef8 100644 --- a/apps/smartdoc/settings/base.py +++ b/apps/smartdoc/settings/base.py @@ -104,6 +104,10 @@ CACHES = { 'CULL_FREQUENCY': 5, } }, + 'default_file': { + 'BACKEND': 'common.cache.file_cache.FileCache', + 'LOCATION': os.path.join(PROJECT_DIR, 'data', 'cache', "default_file_cache") # 文件夹路径 + }, 'chat_cache': { 'BACKEND': 'common.cache.file_cache.FileCache', 'LOCATION': os.path.join(PROJECT_DIR, 'data', 'cache', "chat_cache") # 文件夹路径