gpt4 book ai didi

Django 缓存 : Use Memcached and fallback to FileSystem

转载 作者:行者123 更新时间:2023-12-01 10:55:29 24 4
gpt4 key购买 nike

简单问题:

我的服务器有 1G RAM 和 10GB 磁盘空间

我正在使用 per-site cache , 我想尽可能多地使用 Memcached , 但是当它的空间不足时 cache will be saved in hard disk .

(所有站点的页面加起来大约 2GB)

是否有一个简单的配置来实现这个?

这样做真的很明智吗?

谢谢

最佳答案

听起来您希望 Memcached 像普通 RAM 一样运行,并在内存已满时分页到磁盘。默认情况下它不是,但是您可以像@AlexanderAfanasiev 提到的那样通过编写自己的缓存后端来模仿它。实现将遵循以下原则:

首先,定义三个缓存:

CACHES = {
'default': {
'BACKEND': 'myapp.cache.DoubleCache',
},
'memcached': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
},
'filecache': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': '/foo/bar',
}
}

然后,在 myapp/cache.py 中:

from django.core.cache.backends.base import BaseCache
from django.core.cache import get_cache, cache
mem_cache = get_cache('memcached')
file_cache = get_cache('filecache')

class DoubleCache(BaseCache):

def get(self, key, default=None, version=None):
result = mem_cache.get(key, default=default, version=version)
if result:
return result
else:
return file_cache.get(key, default=default, version=version)

def set(self, key, value, timeout=None, version=None, client=None, _add_only=False):
memcache_result = mem_cache.set(key, value, timeout=timeout, version=version, client=client, _add_only=_add_only)
file_result = file_cache.set(key, value, timeout=timeout, version=version, client=client, _add_only=_add_only)
return memcache_result

这将始终在两个缓存中存储值。它将从 Memcached 中检索值,如果未找到,将尝试使用 file_cache。这意味着 Memcached 可以管理自己的滚降,只有最旧的命中才会回退到 file_cache。这就是您想要的。

当然,您还必须实现其余的缓存函数,例如 delete()get_many() 等。希望这能让您正确的道路。

关于Django 缓存 : Use Memcached and fallback to FileSystem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15453716/

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