fix: 修复多work导致数据不同步问题
This commit is contained in:
parent
8076d4b048
commit
6f284420d6
29
apps/common/cache/file_cache.py
vendored
29
apps/common/cache/file_cache.py
vendored
@ -12,7 +12,7 @@ import os
|
|||||||
import time
|
import time
|
||||||
|
|
||||||
from diskcache import Cache
|
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):
|
class FileCache(BaseCache):
|
||||||
@ -29,35 +29,42 @@ class FileCache(BaseCache):
|
|||||||
finally:
|
finally:
|
||||||
os.umask(old_umask)
|
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,
|
expire = timeout if isinstance(timeout, int) or isinstance(timeout,
|
||||||
float) or timeout is None else timeout.total_seconds()
|
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,
|
expire = timeout if isinstance(timeout, int) or isinstance(timeout,
|
||||||
float) or timeout is None else timeout.total_seconds()
|
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):
|
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):
|
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,
|
expire = timeout if isinstance(timeout, int) or isinstance(timeout,
|
||||||
float) else timeout.total_seconds()
|
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的剩余时间
|
获取key的剩余时间
|
||||||
:param key: key
|
:param key: key
|
||||||
:return: 剩余时间
|
: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:
|
if value is None:
|
||||||
return None
|
return None
|
||||||
return datetime.timedelta(seconds=math.ceil(expire_time - time.time()))
|
return datetime.timedelta(seconds=math.ceil(expire_time - time.time()))
|
||||||
|
|||||||
@ -6,7 +6,9 @@
|
|||||||
@date:2024/7/24 19:23
|
@date:2024/7/24 19:23
|
||||||
@desc:
|
@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):
|
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):
|
if cache_instance.has_key(key, version=version):
|
||||||
return cache_instance.get(key, version=version)
|
return cache_instance.get(key, version=version)
|
||||||
data = get_data(*args, **kwargs)
|
data = get_data(*args, **kwargs)
|
||||||
cache_instance.add(key, data, version=version)
|
cache_instance.add(key, data, timeout=None, version=version)
|
||||||
return data
|
return data
|
||||||
data = get_data(*args, **kwargs)
|
data = get_data(*args, **kwargs)
|
||||||
cache_instance.set(key, data, version=version)
|
cache_instance.set(key, data, timeout=None, version=version)
|
||||||
return data
|
return data
|
||||||
|
|
||||||
return run
|
return run
|
||||||
|
|||||||
@ -104,6 +104,10 @@ CACHES = {
|
|||||||
'CULL_FREQUENCY': 5,
|
'CULL_FREQUENCY': 5,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
'default_file': {
|
||||||
|
'BACKEND': 'common.cache.file_cache.FileCache',
|
||||||
|
'LOCATION': os.path.join(PROJECT_DIR, 'data', 'cache', "default_file_cache") # 文件夹路径
|
||||||
|
},
|
||||||
'chat_cache': {
|
'chat_cache': {
|
||||||
'BACKEND': 'common.cache.file_cache.FileCache',
|
'BACKEND': 'common.cache.file_cache.FileCache',
|
||||||
'LOCATION': os.path.join(PROJECT_DIR, 'data', 'cache', "chat_cache") # 文件夹路径
|
'LOCATION': os.path.join(PROJECT_DIR, 'data', 'cache', "chat_cache") # 文件夹路径
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user