4 from collections
import OrderedDict
5 from typing
import List
24 1.当内存满足系统运行内存的1/10时,满足最大限度数据内容,保证数据完整性的同时保留数据
26 2.当单次查询数据大于阈值时,保留数据并不在扩大缓存空间,数据完整保留,但不再清理,直到处于第二缓存空间更多查询数据量再次大于阈值时清理
28 3.当通过aestate改变数据时记录数据变更信息,并重新将数据写入缓存,移除旧缓存数据,这将意味着非通过aestate修改的数据不可被检测到
30 4.扩容策略:当前内存>=当前容量1/2时,重新计算查询数据量
32 5.流量计算方式:当前缓存大小 + (当前缓存大小 / 上次扩容时间至当前时间段内插入的新内容数量) * 2 * 当前缓存大小
34 6.移除方案:时间段内缓存查询次数最少内存最大优先,当 (A次数-B次数) * 10 <= (A占用内存-B占用内存),优先删除B
46 instance = Singleton.createObject(cls)
66 if item._type == name:
80 _instance_lock = threading.RLock()
83 def append(self, _cls_name: type, _object):
87 def get(_cls, *args, **kwargs):
89 _class_object_ = object.__new__(_cls)
90 cls_name = others.fullname(_class_object_)
91 _obj = this.pojo_list.get(cls_name)
93 this.append(cls_name, _class_object_)
94 _obj = this.pojo_list.get(cls_name)
95 [setattr(_obj, k, v)
for k, v
in kwargs.items()]
100 instance = Singleton.createObject(cls)
105 _instance_lock = threading.RLock()
107 info_logo_show =
False
108 warn_logo_show =
False
109 error_logo_show =
False
117 if status == LogStatus.Info:
120 logo_show =
'info_logo_show'
121 elif status == LogStatus.Error:
122 center_name =
'error'
124 logo_show =
'error_logo_show'
125 elif status == LogStatus.Warn:
128 logo_show =
'warn_logo_show'
132 logo_show =
'info_logo_show'
134 _path = os.path.join(path, center_name)
136 oa.append(others.date_format(fmt=
'%Y.%m.%d.%H.%M.%S') +
'.log')
137 setattr(self, logo_show,
False)
139 if not os.path.exists(os.path.join(_path, oa[len(oa) - 1])):
140 write(os.path.join(_path,
'.temp'),
'')
141 setattr(self, logo_show,
False)
142 if os.path.getsize(os.path.join(_path, oa[len(oa) - 1])) >= max_clear:
143 oa.append(others.date_format(fmt=
'%Y.%m.%d.%H.%M.%S') +
'.log')
144 setattr(self, logo_show,
False)
146 return os.path.join(center_name, oa[len(oa) - 1])
149 instance = Singleton.createObject(cls)