gpt4 book ai didi

python - Django redis 缓存重建

转载 作者:可可西里 更新时间:2023-11-01 11:24:54 25 4
gpt4 key购买 nike

我们有一个应用程序需要在缓存中更新每日数据。因此,如果我们清除数据,是否有任何简单的方法可以在不访问所有页面和组合的情况下重建缓存。有什么方法可以自动执行此操作。

最佳答案

我使用 Django 模型为来自“sql-lite”的临时缓存数据创建了一个装饰器类:
这个方法对你有帮助吗?

装饰器:

class MWT(object):
"""Memoize With Timeout CACHE as a decorator"""
_caches = {}
_timeouts = {}

def __init__(self, timeout=2):
self.timeout = timeout

def collect(self):
"""Clear cache of results which have timed out"""
for func in self._caches:
cache = {}
for key in self._caches[func]:
if (time.time() - self._caches[func][key][1]) < self._timeouts[func]:
cache[key] = self._caches[func][key]
self._caches[func] = cache

def __call__(self, f):
self.cache = self._caches[f] = {}
self._timeouts[f] = self.timeout

def func(*args, **kwargs):
kw = kwargs.items()
kw.sort()
key = (args, tuple(kw))
try:
v = self.cache[key]
if (time.time() - v[1]) > self.timeout:
raise KeyError
except KeyError:
v = self.cache[key] = f(*args, **kwargs), time.time()
return v[0]

func.func_name = f.func_name

return func

我的模型:

class MySimpleModel(models.Model):
name = models.CharField(max_length=100)

def __unicode__(self):
return "{} - {}".format(self.name, self.id)

def __set__(self):
return self.name

然后我使用这个方法(defined decorator)来读取Django模型:

class SQLData(object):
def __init__(self, name):
self._name = name

def name(self):
return self._name


@MWT(timeout=10) # You can set any value to timeout (time of clearing cache).
def sql_reader():
return list(MySimpleModel.objects.all()) # Using list method as faster to read sql.

class GetData(object):
def __init__(self):
pass

@classmethod
def get_data(cls):
result = []

for data in sql_reader():
data = SQLData(data.name)
result.append(data)

return result

关于python - Django redis 缓存重建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48469992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com