基于memcached的缓存机制
memcached是一套高性能的基于分布式的缓存系统,用于动态Web应用以减轻后台数据服务器的负载。
memcached可以处理并发的网络连接。它在内存中开辟一块空间,然后建立一个Hash表,将缓存数据通过键/值存储在Hash表中进行管理。memcached由服务端和客户端两个核心组件组成,服务端先通过计算“键”的Hash值来确定键/值对在服务端所处的位置。当确定键/值对的位置后,客户端就会发送一个查询请求给对应的服务端,让它来查找并返回确切的数据。
在Nginx服务器的标准HTTP模块中有一个ngx_http_memcached_module模块,专门用于处理和memcached相关的配置和功能实现。
memcached_pass
memcached_pass指令用于配置memcached服务器的地址,其语法结构为:
其中,address为memcached服务器的地址,支持IP+端口的地址或者是域名地址。也可以使用upstream指令配置一个memcached服务器组,然后将address配置为upstream的名称。
memcached_connect_timeout
memcached_connect_timeout指令用于配置连接memcached服务器的超时时间,其语法结构为:
其中,time为设置的超时时间,默认为60 s。建议该时间不要超过75s。
memcached_read_timeout
memcached_read_timeout指令配置Nginx服务器向memcached服务器发出两次read请求之间的等待超时时间,如果在该时间内没有进行数据传输,连接将会被关闭。该语法结构为:
其中,time为设置的超时时间,默认为60 s。
memcached_send_timeout
memcached_send_timeout指令配置Nginx服务器向memcached服务器发出两次write请求之间的等待超时时间,如果在该时间内没有进行数据传输,连接将会被关闭。该语法结构为:
其中,time为设置的超时时间,默认为60 s。
memcached_buffer_size
memcached_buffer_size指令用于配置Nginx服务器用于接收memcached服务器响应数据的缓存区大小,其语法结构为:
其中,size为设置的缓存区大小,一般是所在平台的内存页大小的倍数。默认设置为:
memcached_next_upstream
memcached_next_upstream指令在配置了一组memcached服务器的情况下使用。服务器组中各memcached服务器的访问规则遵循upstream指令配置的轮询规则,同时可以使用该指令配置在发生哪些异常情况时,将请求顺次交由下一个组内服务器处理。该指令的语法结构为:
其中,status为设置的memcached服务器返回状态,可以是一个或者多个。这些状态包括:
error,在建立连接、向memcached服务器发送请求或者读取响应头时服务器发生连接错误。
timeout,在建立连接、向memcached服务器发送请求或者读取响应头时服务器发生连接超时。
invalid_header,memcached服务器返回的响应头为空或者无效。
not_found,memcached服务器未找到对应的键/值对。
off,无法将请求发送给memcached服务器。
在实际配置Nginx服务器使用memcached时,我们需要对Nginx配置的全局变量$memcached_key进行设置。
在该配置中,我们设置$memcached_key变量的值为"$uri?$args",Nginx服务器会根据该值调用Hash算法向memcached服务器发送查询请求。如果在请求缓存数据的时候返回的状态代码为404、502或者504时,则将错误进行重定位,重定位后的请求被location @fallback {…}捕获并转向后台服务器请求实际数据。
Last updated
Was this helpful?