mirror of
https://github.com/1Panel-dev/MaxKB.git
synced 2025-12-26 01:33:05 +00:00
fix: 修复多work导致数据不同步问题
This commit is contained in:
parent
8076d4b048
commit
6f284420d6
|
|
@ -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()))
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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") # 文件夹路径
|
||||
|
|
|
|||
Loading…
Reference in New Issue