首页 » web服务器

memcache搭建和教程 教程目录

   发表于:web服务器评论 ()   热度:1444

memcache搭建和教程

1、概述
2、memcache搭建和配置
2.1  编译安装Libevent----------------------------------------
2.2  安装配置Memcache----------------------------------------
3、安装memcache图形可视化工具
3.1安装好http和php环境网站环境--------------------------------
3.2图形可视化工具安装配置-------------------------------------
4、memcache使用
5、memcache优化

1、概述

Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。

在开始安装和使用 using memcached 之前,我们需要了解如何将 memcached 融入到您的环境中。虽然在任何地方都可以使用 memcached,但我发现需要在数据库层中执行几个经常性查询时,memcached 往往能发挥最大的效用。我经常会在数据库和应用服务器之间设置一系列 memcached 实例,并采用一种简单的模式来读取和写入这些服务器。图 1 可以帮助您了解如何设置应用程序体系结构:

 

体系结构相当容易理解。我建立了一个 Web 层,其中包括一些 Apache 实例。下一层是应用程序本身。这一层通常运行于 Apache Tomcat 或其他开源应用服务器之上。再下面一层是配置 memcached 实例的地方 — 即应用服务器与数据库服务器之间。在使用这种配置时,需要采用稍微不同的方式来执行数据库的读取和写入操作。

读取

我执行读取操作的顺序是从 Web 层获取请求(需要执行一次数据库查询)并检查之前在缓存中存储的查询结果。如果我找到所需的值,则返回它。如果未找到,则执行查询并将结果存储在缓存中,然后再将结果返回给 Web 层。

写入

将数据写入到数据库中时,首先需要执行数据库写入操作,然后将之前缓存的任何受此写入操作影响的结果设定为无效。此过程有助于防止缓存和数据库之间出现数据不一致性。

2、memcache搭建和配置

2.1   编译安装Libevent
curl -O http://www.monkey.org/~provos/libevent-2.0.13-stable.tar.gz
tar -zxvf libevent-2.0.13-stable.tar.gz
cd libevent-2.0.13-stable-tar.gz
./configure --prefix=/usr
make ; make install
检测一下查看是否安装:

ls -al /usr/lib | grep libevent
#显示
libevent.so -> libevent-2.0.so.5.1.2

2.2   安装配置Memcache
curl -O http://www.danga.com/memcached/dist/memcached-1.4.0.tar.gz
tar -zxvf memcached-1.4.0.tar.gz
cd memcached-1.4.0.tar.gz
./configure --with-libevent=/usr/
make ; make install

检测是否成功安装

ls -al /usr/local/bin/mem*
#显示
/usr/local/bin/memcached


开启Memcached守护进程

memcached -d -m 2048  -p 11211 -u root -c 1024
#连接参数解析
-p 监听端口
-l 连接的IP地址,默认是本机
-d start启动memecache服务
-d restart重启
-d stop|shutdown关闭服务
-d install 安装
-d uninstall 卸载
-u 以身份运行仅在root下有效
-m 最大内存使用,单位MB,默认64MB,最大2G
-M 内存耗尽时返回错误
-c 最大同时连接数量,默认是1024
-f 块大小增长因为,默认是1.25
-n 最小分配空间,key+value+flags默认48
-h 显示帮助


#使用telnet连接
telnet localhost 11211
#直接按回车会出现客户端错误.



#查看当前状态命令

stats

stats参数参考

STAT pid 22459                             进程ID
STAT uptime 1027046                        服务器运行秒数
STAT time 1273043062                       服务器当前unix时间戳
STAT version 1.4.4                         服务器版本
STAT pointer_size 64                       操作系统字大小(这台服务器是64位的)
STAT rusage_user 0.040000                  进程累计用户时间
STAT rusage_system 0.260000                进程累计系统时间
STAT curr_connections 10                   当前打开连接数
STAT total_connections 82                  曾打开的连接总数
STAT connection_structures 13              服务器分配的连接结构数
STAT cmd_get 54                            执行get命令总数
STAT cmd_set 34                            执行set命令总数
STAT cmd_flush 3                           指向flush_all命令总数
STAT get_hits 9                            get命中次数
STAT get_misses 45                         get未命中次数
STAT delete_misses 5                       delete未命中次数
STAT delete_hits 1                         delete命中次数
STAT incr_misses 0                         incr未命中次数
STAT incr_hits 0                           incr命中次数
STAT decr_misses 0                         decr未命中次数
STAT decr_hits 0                           decr命中次数
STAT cas_misses 0                          cas未命中次数
STAT cas_hits 0                            cas命中次数
STAT cas_badval 0                          使用擦拭次数
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 15785                      读取字节总数
STAT bytes_written 15222                   写入字节总数
STAT limit_maxbytes 1048576                分配的内存数(字节)
STAT accepting_conns 1                     目前接受的链接数
STAT listen_disabled_num 0                 
STAT threads 4                             线程数
STAT conn_yields 0
STAT bytes 0                               存储item字节数
STAT curr_items 0                          item个数
STAT total_items 34                        item总数
STAT evictions 0                           为获取空间删除item的总数

3、安装memcache图形可视化工具

3.1  安装好http和php环境

3.  2    安装配置

wget http://livebookmark.net/memcachephp/memcachephp.zip

unzip memcachephp.zip

vi  memcache.php          #注明:修改ie登录的账号密码也在这里改

修改     $MEMCACHE_SERVERS[] = ‘IP:11211′; 

cp memcache.php /var/www/html

service memcached restart  

3.3 图形可视化工具测试

     http://服务器IP/memcache.php  如下图

 

 

4、memcache使用

4.1  memcache的使用

通过telnet已经登录到 memcached 服务器。此后,您将能够通过一系列简单的命令来与 memcached 通信。

① 基本 memcached 客户机命令

您将使用五种基本 memcached 命令执行最简单的操作。这些命令和操作包括:

Set、add、replace、get、delete

前三个命令是用于操作存储在 memcached 中的键值对的标准修改命令。它们都非常简单易用,且都使用清单 5 所示的语法:
表 1. memcached 修改命令参数

参数

用法

key key 用于查找缓存值
flags 可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息
expiration time 在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
bytes 在缓存中存储的字节点
value 存储的值(始终位于第二行)

现在,我们来看看这些命令的实际使用。

set 
set 命令用于向缓存添加新的键值对。如果键已经存在,则之前的值将被替换。

注意以下交互,它使用了 set 命令:

set userId 0 0 5
12345
STORED

如果使用 set 命令正确设定了键值对,服务器将使用单词 STORED 进行响应。本示例向缓存中添加了一个键值对,其键为 userId,其值为 12345。并将过期时间设置为 0,这将向 memcached 通知您希望将此值存储在缓存中直到删除它为止。

add 
仅当缓存中不存在键时,add 命令才会向缓存中添加一个键值对。如果缓存中已经存在键,则之前的值将仍然保持相同,并且您将获得响应 NOT_STORED。

下面是使用 add 命令的标准交互:

set userId 0 0 5
12345
STORED
add userId 0 0 5
55555
NOT_STORED
add companyId 0 0 3
564
STORED

replace 
仅当键已经存在时,replace 命令才会替换缓存中的键。如果缓存中不存在键,那么您将从 memcached 服务器接受到一条 NOT_STORED 响应。 

下面是使用 replace 命令的标准交互: 

replace accountId 0 0 5
67890
NOT_STORED
set accountId 0 0 5
67890
STORED
replace accountId 0 0 5
55555
STORED

最后两个基本命令是 get 和 delete。

接下来看这些命令的应用。

get 
get 命令用于检索与之前添加的键值对相关的值。您将使用 get 执行大多数检索操作。 

下面是使用 get 命令的典型交互:

set userId 0 0 5
12345
STORED
get userId
VALUE userId 0 5
12345
END
get bob
END

delete 
最后一个基本命令是 delete。delete 命令用于删除 memcached 中的任何现有值。您将使用一个键调用 delete,如果该键存在于缓存中,则删除该值。如果不存在,则返回一条 NOT_FOUND 消息。 

下面是使用 delete 命令的客户机服务器交互:

set userId 0 0 5
98765
STORED
delete bob
NOT_FOUND
delete userId
DELETED
get userId
END

 

 

② 缓存管理命令

最后两个 memcached 命令用于监控和清理 memcached 实例。它们是 stats 和 flush_all 命令。

 

stats 
stats 命令的功能正如其名:转储所连接的 memcached 实例的当前统计数据。在下例中,执行 stats 命令显示了关于当前 memcached 实例的信息:

stats
STAT pid 63
STAT uptime 101758
STAT time 1248643186
STAT version 1.4.11
STAT pointer_size 32
STAT rusage_user 1.177192
STAT rusage_system 2.365370
STAT curr_items 2
STAT total_items 8
STAT bytes 119
STAT curr_connections 6
STAT total_connections 7
STAT connection_structures 7
STAT cmd_get 12
STAT cmd_set 12
STAT get_hits 12
STAT get_misses 0
STAT evictions 0
STAT bytes_read 471
STAT bytes_written 535
STAT limit_maxbytes 67108864
STAT threads 4
END

此处的大多数输出都非常容易理解。稍后在讨论缓存性能时,我还将详细解释这些值的含义。至于目前,我们先来看看输出,然后再使用新的键来运行一些 set 命令,并再次运行 stats 命令,注意发生了哪些变化。

 

缓存性能

在本文的最后,我将讨论如何使用高级 memcached 命令来确定缓存的性能。stats 命令用于调优缓存的使用。需要注意的两个最重要的统计数据是get_hits 和 get_misses。这两个值分别指示找到名称/值对的次数(get_hits)和未找到名称/值对的次数(get_misses)。

结合这些值,我们可以确定缓存的利用率如何。初次启动缓存时,可以看到 get_misses 会自然地增加,但在经过一定的使用量之后,这些 get_misses 值应该会逐渐趋于平稳 — 这表示缓存主要用于常见的读取操作。如果您看到 get_misses 继续快速增加,而 get_hits 逐渐趋于平稳,则需要确定一下所缓存的内容是什么。您可能缓存了错误的内容。

确定缓存效率的另一种方法是查看缓存的命中率(hit ratio)。缓存命中率表示执行 get 的次数与错过 get 的次数的百分比。要确定这个百分比,需要再次运行 stats 命令,如清单 8 所示:
清单 8. 计算缓存命中率


stats
STAT pid 6825
STAT uptime 540692
STAT time 1249252262
STAT version 1.2.6
STAT pointer_size 32
STAT rusage_user 0.056003
STAT rusage_system 0.180011
STAT curr_items 595
STAT total_items 961
STAT bytes 4587415
STAT curr_connections 3
STAT total_connections 22
STAT connection_structures 4
STAT cmd_get 2688
STAT cmd_set 961
STAT get_hits 1908
STAT get_misses 780
STAT evictions 0
STAT bytes_read 5770762
STAT bytes_written 7421373
STAT limit_maxbytes 536870912
STAT threads 1
END

 

现在,用 get_hits 的数值除以 cmd_gets。在本例中,您的命中率大约是 71%。在理想情况下,您可能希望得到更高的百分比 — 比率越高越好。查看统计数据并不时测量它们可以很好地判定缓存策略的效率。

5、memcache优化

可从以下几方面考虑优化
1. 尽量使用小容量的数据内容.
2. 可以采用多个memcache服务进行侦听,分开处理,针对服务提供的频繁度划分服务内存。
3. 适当添加memcache到缓存服务器负载均衡集群里,根据服务器的性能不同设置权重 weights,提高服务获取的内存总量、提高命中率
4. 优化memcached客户端的代码。

(。・v・。)
喜欢这篇文章吗?欢迎分享到你的微博、QQ群,并关注我们的微博,谢谢支持。