memcached的安装及配置

来源:互联网 发布:网络神剧排行榜2016 编辑:程序博客网 时间:2024/05/18 00:14

memcached

    首先memcached是一个高性能的分布式内存对象缓存系统,用于动态的web应用,用来减轻数据库的负载。属于一种nosql。用来减少对数据库的读取次数,从而提高动态、数据库驱动网站的速度。memcached基于一个存储键值对key/value的hashmap。随着微信,微博等等应用的火爆,往往点赞,或者粉丝的数量不停的加一,要是不停的因为这个而频繁读写数据库,那对数据库将带来巨大无比的压力。
     首先看看打开一个站点需要多少个请求。


   这里只是打开了腾讯的首页,就一下子发出了这么多个请求。

   接下来就是memcache了。memcache是个典型的key:value。就相当于字典一样。
但是要把web的对象缓存起来是什么意思呢。其实就是key就是uri路径。而uri对应的数据就是value。

memcache及支持纯文本又支持二进制。
memcached是一个内存缓存服务器。并不实现持久缓存。

但存在内存中,就有内存碎片问题。为了解决内存碎片问题,其实在linux内核中为了解决内存碎片,有两个机制

buddy system(伙伴系统) 避免内存外部碎片
slab allocator(slab分配器)就是重复使用一段页面(4k)。slab将内存的页面分为已用的和空闲的(为inode,进程等提前都编好了座)。

当然memcached的是否使用,需要php,c++等程序去调用,就是memcached是个服务,但用不用取决与程序员是否去调用。

看看memcached的站点吧。


    
他本身是事件驱动的,依赖于libevent这个库。
[root@localhost ~]# rpm -q libeventlibevent-1.4.13-4.el6.x86_64[root@localhost ~]# 
编译memcached。
先安装libevent
[root@master Downloads]# tar xf libevent-2.0.21-stable.tar.gz [root@master Downloads]# cd libevent-2.0.21-stable[root@master libevent-2.0.21-stable]# ./configure  --prefix=/usr/local/libevent[root@master libevent-2.0.21-stable]# make && make install
编译memcached
[root@master Downloads]# tar xf memcached-1.4.15.tar.gz [root@master Downloads]# cd memcached-1.4.15[root@master memcached-1.4.15]# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent[root@master memcached-1.4.15]# make && make install

看看编译后都生成了什么。
[root@master memcached-1.4.15]# cd /usr/local/memcached/[root@master memcached]# lsbin  include  share[root@master memcached]# 
其中有个命令叫做memcached。
-p   <num> 指定tcp的监听端口
-U  <num> 指定udp的监听端口
-s   <file> 监听在unix套接字上
-d   使用服务的形式运行。
-m  <num> 指定缓存的最大内存空间
-n   <bytes>指定最小的slab chunk大小

启动memcached。
[root@master bin]# /usr/local/memcached/bin/memcached -m 100 -u nobody -d[root@master bin]# ss -altState       Recv-Q Send-Q                                                 Local Address:Port                                                     Peer Address:Port   LISTEN      0      128                                                               :::memcache                                                            :::*       LISTEN      0      128                                                                *:memcache                                                             *:*       LISTEN      0      128                                                                *:rquotad                                                             *:*       LISTEN      0      128                                                               :::sunrpc                                                             :::*       LISTEN      0      128                                                                *:sunrpc                                                              *:*    

使用telnet去连接那个端口11211.
[root@master bin]# telnet localhost 11211Trying ::1...Connected to localhost.Escape character is '^]'.add mykey 0 30 5helloSTORED


安装memcache的PHP扩展。

[root@nginx Downloads]# tar xf memcache-2.2.5.tgz [root@nginx Downloads]# cd memcache-2.2.5[root@nginx memcache-2.2.5]# /usr/local/php/bin/phpize Configuring for:PHP Api Version:         20100412Zend Module Api No:      20100525Zend Extension Api No:   220100525[root@nginx memcache-2.2.5]# ./configure --with-php-config=/usr/local/php/bin/php-config --enable-memcache[root@nginx memcache-2.2.5]# make && make install

编译后得到的一个路径,这个很重要,需要记下来。
Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-zts-20100525/

创建目录。并创建配置文件。
[root@nginx memcache-2.2.5]# mkdir /etc/php.d[root@nginx memcache-2.2.5]# vim /etc/php.d/memcache.ini

/etc/php.d/memcache.ini的内容如下。
extension=/usr/local/php/lib/php/extensions/no-debug-zts-20100525/memcache.so

重启php-fpm。访问nginx的主页面。



测试memcache。

编辑一个php的测试页。
<?php$memcache = new Memcache;$memcache->connect('127.0.0.1', 11211) or die ("Could not connect");$version = $memcache->getVersion();echo "Server's version: ".$version."\n";$tmp_object = new stdClass;$tmp_object->str_attr = 'test';$tmp_object->int_attr = 123;$memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at theserver");echo "Store data in the cache (data will expire in 10 seconds)\n";$get_result = $memcache->get('key');echo "Data from the cache:\n";var_dump($get_result);?>test.php (END) 

再复制一个php缓存的监控页面过来。(这个页面在memcache的源码包里。修改里面的访问主机地址)
[root@nginx memcache-2.2.5]# cp /root/Downloads/memcache-2.2.5/memcache.php /usr/html/


现在看看memcache.php的页面。

通过反复访问测试页,发现缓存的集中率明显变高了。


nginx配置memcache的方法。
      location / {            root   html;            index  index.php index.html index.htmi;            set $memcached_key $uri;            memcached_pass     127.0.0.1:11211;            default_type       text/html;        }


    

1 0
原创粉丝点击