Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django memcache始终未命中_Django_Memcached_Python Memcached - Fatal编程技术网

django memcache始终未命中

django memcache始终未命中,django,memcached,python-memcached,Django,Memcached,Python Memcached,我正在windows系统上运行memcached服务,我已将我的开发设置配置为具有以下缓存设置: CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': '127.0.0.1:11211', 'TIMEOUT': 3600, 'OPTIONS': { 'M

我正在windows系统上运行memcached服务,我已将我的开发设置配置为具有以下缓存设置:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
        'TIMEOUT': 3600,
        'OPTIONS': {
            'MAX_ENTRIES': 100
        }
    }
}
我正在使用以下代码设置并从缓存中获取内容:

from django.core.cache import cache
def get_element(fsid):
    element = cache.get(str(fsid))  # get element from memcache if present
    if element is None:
        info("cache miss for fsid-"+str(fsid))
        fs = FlowStatusModel.objects.get(pk=fsid)
        pickle_path = fs.pickle
        gcs_pickle_path = fs.gcs_pickle
        try:
            info("reading from local disk")
            with open(pickle_path, 'rb') as handle:
                element = pickle.load(handle)
        except:
            info("local disk failed. copying file from cloud storage bucket to local disk")
            create_and_copy(gcs_pickle_path, pickle_path)
            with open(gcs_pickle_path, 'rb') as handle:
                element = pickle.load(handle)
        info("adding fsid-"+str(fsid) + " to cache with 1hour timeout")
        cache.set(str(fsid), element, 3600)
    return element

我在日志中看到总是有缓存未命中。我不知道django是否能够在缓存中设置元素。如果我使用简单的
set
get
python manage.py shell
尝试,我就能够获取数据。我试图从命令prompgt运行命令
memcached.exe-vv
,查看它是否接收到请求,但在这两种情况下(从dev server/manage.py shell),我都看不到控制台上打印的任何设置或获取信息。我非常感谢您能帮助我解决这个问题。

可能是因为:

    'OPTIONS': {
        'MAX_ENTRIES': 100
    }
这是一个非常小的数字。你可能有一个很大的打击。每次向缓存中添加某些内容时,很可能会替换其他内容。这可能就是您的
fsid
键发生的情况

也可能是您违反了memcached的最大项目大小。通过更改memcached配置文件(memcached.conf)并添加以下内容来修复此问题

MAXITEMSIZE=12m

但是,需要注意的是,如果您正在存储如此大的对象,memcached可能并不适合您。

可能是因为:

    'OPTIONS': {
        'MAX_ENTRIES': 100
    }
这是一个非常小的数字。你可能有一个很大的打击。每次向缓存中添加某些内容时,很可能会替换其他内容。这可能就是您的
fsid
键发生的情况

也可能是您违反了memcached的最大项目大小。通过更改memcached配置文件(memcached.conf)并添加以下内容来修复此问题

MAXITEMSIZE=12m

但是,应该注意的是,如果存储的对象太大,memcached可能并不适合您。

到目前为止,我几乎没有插入5个条目。你认为这仍然是一个问题吗?使用memcached工具来确认这种情况如何?它将向您显示缓存实际包含了多少项。我看到当django服务器命中memcached时,
telnet 127.0.0.1 11211
并没有改变
STAT cmd_set
,但是当我尝试从
python manage.py shell
设置时,它会增加。我认为Django服务器有问题。您是否看到我当前配置中存在任何问题?顺便说一下,我没有在设置文件中的
中间件类
字段中添加任何缓存中间件类。我可以设置为值的对象的大小有任何限制吗?我试图设置为该值的pickle在磁盘上大约为10MB。看起来这些值的限制是1MB。我会看看我能做些什么来改变这一点,或者我会看看redis是否符合我的需要。谢谢你的时间。到目前为止,我几乎没有插入5个条目。你认为这仍然是一个问题吗?使用memcached工具来确认这种情况如何?它将向您显示缓存实际包含了多少项。我看到当django服务器命中memcached时,
telnet 127.0.0.1 11211
并没有改变
STAT cmd_set
,但是当我尝试从
python manage.py shell
设置时,它会增加。我认为Django服务器有问题。您是否看到我当前配置中存在任何问题?顺便说一下,我没有在设置文件中的
中间件类
字段中添加任何缓存中间件类。我可以设置为值的对象的大小有任何限制吗?我试图设置为该值的pickle在磁盘上大约为10MB。看起来这些值的限制是1MB。我会看看我能做些什么来改变这一点,或者我会看看redis是否符合我的需要。谢谢你抽出时间。