Skip to content

Commit bfea148

Browse files
committed
fix: 修复多work导致数据不同步问题
1 parent f20c3d0 commit bfea148

File tree

3 files changed

+27
-14
lines changed

3 files changed

+27
-14
lines changed

apps/common/cache/file_cache.py

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import time
1313

1414
from diskcache import Cache
15-
from django.core.cache.backends.base import DEFAULT_TIMEOUT, BaseCache
15+
from django.core.cache.backends.base import BaseCache
1616

1717

1818
class FileCache(BaseCache):
@@ -29,35 +29,42 @@ def _createdir(self):
2929
finally:
3030
os.umask(old_umask)
3131

32-
def add(self, key, value, timeout=DEFAULT_TIMEOUT, version=None):
32+
def add(self, key, value, timeout=None, version=None):
3333
expire = timeout if isinstance(timeout, int) or isinstance(timeout,
3434
float) or timeout is None else timeout.total_seconds()
35-
return self.cache.add(key, value=value, expire=expire)
35+
return self.cache.add(self.get_key(key, version), value=value, expire=expire)
3636

37-
def set(self, key, value, timeout=DEFAULT_TIMEOUT, version=None):
37+
def set(self, key, value, timeout=None, version=None):
3838
expire = timeout if isinstance(timeout, int) or isinstance(timeout,
3939
float) or timeout is None else timeout.total_seconds()
40-
return self.cache.set(key, value=value, expire=expire)
40+
return self.cache.set(self.get_key(key, version), value=value, expire=expire)
4141

4242
def get(self, key, default=None, version=None):
43-
return self.cache.get(key, default=default)
43+
return self.cache.get(self.get_key(key, version), default=default)
44+
45+
@staticmethod
46+
def get_key(key, version):
47+
if version is None:
48+
return f"default:{key}"
49+
return f"{version}:{key}"
4450

4551
def delete(self, key, version=None):
46-
return self.cache.delete(key)
52+
return self.cache.delete(self.get_key(key, version))
4753

48-
def touch(self, key, timeout=DEFAULT_TIMEOUT, version=None):
54+
def touch(self, key, timeout=None, version=None):
4955
expire = timeout if isinstance(timeout, int) or isinstance(timeout,
5056
float) else timeout.total_seconds()
5157

52-
return self.cache.touch(key, expire=expire)
58+
return self.cache.touch(self.get_key(key, version), expire=expire)
5359

54-
def ttl(self, key):
60+
def ttl(self, key, version=None):
5561
"""
5662
获取key的剩余时间
5763
:param key: key
5864
:return: 剩余时间
65+
@param version:
5966
"""
60-
value, expire_time = self.cache.get(key, expire_time=True)
67+
value, expire_time = self.cache.get(self.get_key(key, version), expire_time=True)
6168
if value is None:
6269
return None
6370
return datetime.timedelta(seconds=math.ceil(expire_time - time.time()))

apps/common/util/cache_util.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
@date:2024/7/24 19:23
77
@desc:
88
"""
9-
from django.core.cache import cache
9+
from django.core.cache import caches
10+
11+
cache = caches['default_file']
1012

1113

1214
def get_data_by_default_cache(key: str, get_data, cache_instance=cache, version=None, kwargs=None):
@@ -43,10 +45,10 @@ def run(*args, **kwargs):
4345
if cache_instance.has_key(key, version=version):
4446
return cache_instance.get(key, version=version)
4547
data = get_data(*args, **kwargs)
46-
cache_instance.add(key, data, version=version)
48+
cache_instance.add(key, data, timeout=None, version=version)
4749
return data
4850
data = get_data(*args, **kwargs)
49-
cache_instance.set(key, data, version=version)
51+
cache_instance.set(key, data, timeout=None, version=version)
5052
return data
5153

5254
return run

apps/smartdoc/settings/base.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,10 @@
104104
'CULL_FREQUENCY': 5,
105105
}
106106
},
107+
'default_file': {
108+
'BACKEND': 'common.cache.file_cache.FileCache',
109+
'LOCATION': os.path.join(PROJECT_DIR, 'data', 'cache', "default_file_cache") # 文件夹路径
110+
},
107111
'chat_cache': {
108112
'BACKEND': 'common.cache.file_cache.FileCache',
109113
'LOCATION': os.path.join(PROJECT_DIR, 'data', 'cache', "chat_cache") # 文件夹路径

0 commit comments

Comments
 (0)