您的位置:首页 > 数据库 > Memcache

Memcached 安装使用说明

2014-05-22 22:05 260 查看
原文地址:http://sky425509.iteye.com/blog/2047372


概述

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个G 以上 / 一台。

软件环境

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

Libevent库,Memcached安装前首先确定你的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 这几个文件存在,说明安装成功

第四步:解压Memcached,tar 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/Memcached是Memcached的安装地址

命令选项说明

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

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

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

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

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

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

-P选项 设置保存memcache的pid文件,命令中保存在 /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服务器机时候一定要注意,我们可以把它放到防火墙后,如果有防火墙的话。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: