gpt4 book ai didi

django - 写入 Django 缓存非常慢

转载 作者:行者123 更新时间:2023-12-04 14:46:33 26 4
gpt4 key购买 nike

我曾经在全局变量中缓存数据库查询以加快我的应用程序。由于这是强烈不建议的(并且它确实产生了问题),我想改用任何类型的 Django 缓存。我尝试了 LocMemCache 和 DatabaseCache,但都需要...大约 15 秒 来设置我的变量(比生成数据所需的时间长两倍,数据大小为 7MB)。

这是预期的吗?我做错了什么吗?

(Memcached 限制为 1MB,我不能分割我的数据,它由任意大的二进制掩码组成)。

编辑:FileBasedCache 也需要 30 秒来设置。

设置.py:

CACHES = {
'default': {...},
'stats': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
# or 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'stats',
},
}

服务.py:

from django.core.cache import caches

def stats_service():
stats_cache = caches['stats']
if stats_cache.get('key') is None:
stats_cache.set('key', data) # 15s with DatabaseCache, 30s with LocMemCache
return stats_cache.get('key')

全局变量(超快)版本:

_cache = {}

def stats_service():
if _cache.get('key') is None:
_cache['key'] = data
return _cache['key']

最佳答案

一个选项可能是使用 diskcache.DjangoCache . DiskCache扩展 Django 缓存 API 以支持按原样写入和读取二进制流(避免 pickling)。它特别适用于大值(例如大于 1MB 的值)。 DiskCache 是 Apache2 许可的磁盘和 file backed cache library ,用纯 Python 编写,并与 Django 兼容。

在您的情况下,您可以使用 ndarray tostring和 numpy fromstring 方法来快速转换为 Python 字符串或从中转换。然后用 io.StringIO 包裹字符串在缓存中存储/检索。例如:

from django.core.cache import cache

value = cache.get('cache-key', read=True)

if value:
data = numpy.fromstring(value.read())
value.close()
else:
data = ... # Generate 7MB array.
cachge.set('cache-key', io.StringIO(data.tostring()), read=True)

DiskCache 通过允许在磁盘上存储为二进制 blob 的类似文件的值来扩展 Django 缓存 API。 Django cache benchmarks页面对备选缓存后端进行了讨论和比较。

关于django - 写入 Django 缓存非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35366011/

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