`

Memcached 安装使用说明

阅读更多

 

概述

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。

Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过Memcached协议与守护进程通信。但是它并不提供冗余服务(例如,复制其hashmap条目);当某个服务器S停止运行或崩溃了,所有存放在S上的键/值对都将丢失。

 

工作原理

首先Memcached是以守护程序方式运行于一个或多个服务器中,随时接受客户端的连接操作,客户端可以由各种语言编写,目前已知的客户端API包括 Perl/PHP/Python/Ruby/Java/C#/C等等。

客户端在与Memcached服务建立连接之后,接下来的事情就是存取对象了,每个被存取的对象都有一个唯一的标识符key,存取操作均通过这个 key 进行,保存到 Memcached 中的对象实际上是放置内存中的,并不是保存在 cache 文件中的,这也是为什么Memcached能够如此高效快速的原因。注意,这些对象并不是持久的,服务停止之后,里边的数据就会丢失。

Memcached 采用了C/S的模式,在 server 端启动服务进程,在启动时可以指定监听的ip,端口,内存大小等几个关键参数。一旦启动,服务就一直处于可用状态。

Memcached 的目前版本是通过C实现,采用了单进程,单线程,异步I/O,基于事件 (event_based) 的服务方式。使用 libevent 作为事件通知实现。

多个Memcached Server可以协同工作,但这些 Server 之间是没有任何通讯联系的,每个Server 只是对自己的数据进行管理。Client 端通过指定Server端的ip地址(域名)来初始化。

需要缓存的对象或数据是以 key->value 对的形式保存在Server端的内存中。key 的值通过 hash 进行转换,根据hash值客户端就可以把 value 传递到对应的具体的某个Server 上缓存起来。当需要获取对象数据时,也根据 key 进行。首先对 key 进行 hash,通过获得的值可以确定它被保存在了哪台Server上,然后再向该Server发出请求。

其实,Memcached 的工作就是在专门的机器的内存里维护一张巨大的 hash 表,来存储经常被读写的一些数据,如文件,对象,视频,声频等等,由于内存的存取速度比磁盘的存取速度快,从而极大的提高应用的运行效率。

这里需要注意的是,既然Memcached采用了C/S的模式,那么必然存在服务器端和客户端。以上所说的客户端千万不能与自己的应用系统的客户端混为一谈,服务器端也不能与自己应用的服务器混为一谈。



 

 

由图可见,Memcached缓存系统中的服务器端就是我们需要存储数据的“内存”。 Memcached缓存系统的客户端就是我们应用服务器在处理数据时,为了快速获取之前可能已经缓存的数据而调用的API,这些API可以用不同语言来实现,只要符合Memcached的协议即可。在实际中这些API类库是和应用程序放在同一台应用服务器上,这些API是应用程序的一部分。因此Memcached的客户端就是一些采用不同语言实现好的API,我们要用这些API来存取Memcached服务器内存中的数据。

 

Memcached Server安装部署

机器数量

一台或多台机器。多台机器时候,各机器是相互独立的,只需要连接到网络即可,但是,由于Memcached的设计是没有安全认证等机制的,因此Memcached服务器机应该放在防火墙后。

 

硬件环境

Memcached服务器机只是作为应用的一个缓存,对磁盘需求不高,但对内存和CPU要求高,最低配置或基本配置内存一般要1以上 一台。

 

软件环境

Linux版本,先检查linux内核版本,建议将Memcached 安装在内核2.6以上。因为Memcached 需要用到libeventepoll

LibeventMemcached安装前首先确定你的linux服务器上面安装了libevent

 

inux下环境安装

   libevent下载:

http://cloud.github.com/downloads/libevent/libevent/libevent-2.0.17-stable.tar.gz  

   Memcached下载 

http://Memcached.googlecode.com/files/Memcached-1.4.13.tar.gz  

 

   第一步:解压libevent:  tar zxvf libevent-2.0.17-stable.tar.gz 

   然后进入解压后的目录安装libevent是安装 Memcached 的唯一前提条件。它是 Memcached 所依赖的异步事件通知库。

 

   第二步:在解压后的目录里输入命令:

./configure --prefix=/usr/local/libevent && make && make install 

 

   第三步:检查是否安装成功: #cd /usr/local/libevent/lib   输入ls命令查看

   如果有libevent-1.3c.so.1  libevent-1.3c.so.1.0.3  libevent.a  libevent.la  libevent.so 这几个文件存在,说明安装成功

 

   第四步:解压Memcachedtar zxvf Memcached-1.4.13.tar.gz 并进入解压后的目录

 

   第五步:在解压后的目录输入命令: ./configure --with-libevent=/usr/local/libevent --prefix=/usr/local/Memcached && make && make install

 

   第六步:检查是否安装成功: #cd /usr/local/Memcached/bin

           如果Memcached  这个文件存在,说明安装成功

 

   第七步:执行 #cd /usr/local/Memcached/bin

./Memcached -h   

 

    如果出现:

       1. Memcached 1.2.6  

       2. -p       TCP port number to listen on (default: 11211)   

       3. -U       UDP port number to listen on (default: 0, off)   

       4. -s      unix socket path to listen on (disables network support)   

       5. -l   interface to listen on, default is INDRR_ANY   

       6. -d            run as a daemon   

       7. -r            maximize core file limit   

       8. -u  assume identity of  (only when run as root)   

       9. -m       max memory to use for items in megabytes, default is 64 MB   

      10. -M            return error on memory exhausted (rather than removing items)   

      11. -c       max simultaneous connections, default is 1024  

      12. -k            lock down all paged memory   

      13. -v            verbose (print errors/warnings while in event loop)   

      14. -vv           very verbose (also print client commands/reponses)   

      15. -h            print this help and exit   

      16. -i            print Memcached and libevent license   

      17. -b            run a managed instanced (mnemonic: buckets)   

      18. -P      save PID in , only used with -d option   

      19. -f    chunk size growth factor, default 1.25  

      20. -n     minimum space allocated for key+value+flags, default 48  

 

    说明安装成功,并且路径配置正确。

 

启动Memcache的服务器端的命令为:

 #/usr/local/Memcached/bin/Memcached -d -m 10 -u root -l 127.0.0.1 -p 11211 -c 256 -P /tmp/Memcached.pid

 注意:/usr/local/Memcached/bin/MemcachedMemcached的安装地址

 

 命令选项说明

 -d选项 启动一个守护进程,可以启动多个守护进程,但是端口不能一样。这样就可以在     一台机器上拥有多个Memcached 

 -m选项 分配给memcache使用的内存数量,单位是MB,命令中是10MB

 -u选项 运行memcache的用户,命令中是root

 -l选项 监听的服务器IP地址,如果有多个地址的话,命令中指定了服务器的IP地址本地主机127.0.0.1

 -p选项 设置memcache监听的端口,我这里设置了11211,最好是1024以上的端口,

 -c选项 最大运行的并发连接数,默认是1024,命令中设置为256,一般按照服务器的负载    量来设定,

 -P选项 设置保存memcachepid文件,命令中保存在 /tmp/Memcached.pid

        如果想开机自动启动的话,只需在/etc/rc.d/rc.local中加入一行上面命令。

 上面命令有些选项可以参考一下:即,ip不指定时,默认为本地主机;

 

Memcached使用时机

在使用 Memcached 改进应用程序性能时,可以对一些关键的过程和步骤进行修改,但并非任何时候都可以使用Memcached缓存数据,或者说Memcached可以缓存大多数格式的数据,但使用不当,不仅没有起到缓存那种快速响应作用,可能增加了过程时间,反而变慢。

 

两个简单的准则

不要缓存频繁改变的数据如果要缓存的数据频繁改变,您需要不断修改存储在缓存内的值,这将限制缓存的价值。

如果您拥有直接识别一个值的 ID,则您不必缓存那个值。数据库能够使用某个值的 ID 非常快速地查询该值。

 

Memcached 不是一个数据库

最常见的 Memcached 误用就是把它用作一个数据存储,而不是一个缓存。Memcached 的首要目的就是加快数据的响应时间,否则数据从其他数据源构建或恢复需要很长时间。

切不可将 Memcached 用作运行应用程序所需信息的惟一信息源数据应总是可以从其他信息源获取。此外,要记住 Memcached 只是一个键/值的存储。不能在数据上执行查询,或者对内容进行迭代来提取信息。应该使用它来存储数据块或对象以备批量使用。

 

不要缓存数据库行或文件

虽然可以使用 Memcached 存储加载自数据库的数据行,但这实际上是查询缓存,并且大多数数据库都提供各自的查询缓存的机制。其他的对象,比如文件系统的图像或文件的情况与此相同。很多应用程序和 web 服务器针对此类工作已经有了一些很好的解决方案。

如果在加载和格式化后,使用它来存储全部信息块,就可以从 Memcached 获得更多的实用工具和性能上的改善。

 

Memcached 并不安全

为了确保最佳性能,Memcached 并未提供任何形式的安全性,没有身份验证,也没有加密。这意味着对 Memcached 服务器的访问应该这么处理:一是通过将它们放到应用程序部署环境相同的私有侧,二是如果安全性是必须的,那么就使用 UNIX® socket 并只允许当前主机上的应用程序访问此 Memcached 服务器。

这多少牺牲了一些灵活性和弹性,以及跨网络上的多台机器共享 RAM 缓存的能力,但这是在目前的情况下确保 Memcached 数据安全性的惟一一种解决方案。

我们在部署Memcached服务器机时候一定要注意,我们可以把它放到防火墙后,如果有防火墙的话。

 

<!--EndFragment-->
  • 大小: 42.2 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics