Memcached是高性能的分布式内存缓存服务器,经过在内存里维护一个统一的巨大的hash表,它可以用来存储各类格式的数据,包括图像、视频、文件以及数据库检索的结果等, 由国外社区网站 LiveJournal 的开发团队开发。通常的使用目的是,经过缓存数据库查询结果,减小数据库访问次数,以提升动态Web应用的速度、提升可扩展性。
官方网站:http://www.danga.com/memcached/php
当Web客户端发送请求到web服务器的应用程序时,应用程序会经过调用Memcached API客户端程序库接口去链接 Memcached服务器,进而查询数据。
一、若是此时web客户端所请求的数据已经在 Memcached服务端中缓存,则 Memcached服务端会将数据返回给Web客户端;
二、若是数据不存在,则会将Web客户端请求发送至MySQL数据库,由数据库将请求的数据返回给 Memcached以及Web客户端,与此同时Memcached服务器也会将数据进行保存,方便用户下次使用。html
memcached的服务器客户端通讯并不使用复杂的XML等格式, 而使用简单的基于文本行的协议。所以,经过telnet 也能在memcached上保存数据、取得数据。下面是例子。
$ telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
set foo 0 0 3 (保存命令)
bar (数据)
STORED (结果)
get foo (取得命令)
VALUE foo 0 3 (数据)mysql
libevent是个程序库,它将Linux的epoll、BSD类操做系统的kqueue等事件处理功能 封装成统一的接口。即便对服务器的链接数增长,也能发挥O(1)的性能。 memcached使用这个libevent库,所以能在Linux、BSD、Solaris等操做系统上发挥其高性能。c++
为了提升性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。 因为数据仅存在于内存中,所以重启memcached、重启操做系统会致使所有数据消失。 另外,内容容量达到指定值以后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。 memcached自己是为缓存而设计的服务器,所以并无过多考虑数据的永久性问题。 web
数据存储方式:Slab Allocation算法
Slab Allocation即按组分配内存,每次先分配一个slab,至关于一个大小为1MB的页,而后在1MB的空间里根据数据划分大小相同的chunk,该方法能够有效解决内存碎片问题,但可能会对空间有所浪费。sql
memcached尽管是“分布式”缓存服务器,但服务器端并无分布式功能。 各个memcached不会互相通讯以共享信息。数据库
缓存机制:apache
Memcached是一款很是出色的缓存软件,当程序写入缓存数据请求时, Memcached的API接口将Key输入路
由算法模块路由到集群中一台服务器,以后由API接口与服务器进行通讯,完成一次分布式缓存写入。vim
分布式
Memcached分布式部署主要依赖于 Memcached的客户端来实现,多个 Memcached服务器是独立的。分布式数据如何存储是由路由算法所决定的。当数据到达客户端程序库时,客户端的算法就依据路由算法来决定保存的Memcached服务器。读取数据时,客户端依据保存数据时的路由算法选中和存储数据时相同的服务器来读取数据。
本实验用2台CentOS7:
主机 | IP地址 | 角色 | 主要软件包 |
---|---|---|---|
Memcached | 192.168.37.128 | Memcached 服务器 | libevent-2.1.8-stable.tar.gzmemcached-1.5.6.tar.gz |
Memcached API | 192.168.37.130 | Memcached API客户端 | http-2.4.29.tar.gz;mysql-5.6.26.tar.gz;php-5.6.11.tar.bz2;memcache-2.2.7.tar.gz |
一、安装编译环境
yum install gcc gcc-c++ make
二、解压安装包
tar zxvf memcached-1.5.6.tar.gz -C /opt
tar zxvf libevent-2.1.8-stable.tar.gz -C /opt #libevent:事件通知库
三、手工编译安装libevent、memcached
cd /opt/libevent-2.1.8-stable/ ./configure --prefix=/usr/local/libevent make && make install cd /opt/memcached-1.5.6/ ./configure \ --prefix=/usr/local/memcached \ --with-libevent=/usr/local/libevent/ make && make install
四、创建软链接
ln -s /usr/local/memcached/bin/* /usr/local/bin
五、开启memcached
systemctl stop firewalld.service
setenforce 0
memcached -d -m 32m -p 11211 -u root
#-d: 指定守护进程 -m:缓存大小 -p:端口 -u:指定管理用户
netstat -ntap | grep memc
(一)Apache搭建
一、安装环境包
yum install gcc gcc-c++ make pcre-devel expat-devel perl -y
二、解压安装包
tar xzvf http-2.4.29.tar.gz -C /opt
tar xzvf apr-1.4.6.tar.gz -C /opt #支持Apache上层应用跨平台,提供底层接口库
tar xzvf apr-util-1.4.1.tar.gz -C /opt
mv apr-1.6.2/ httpd-2.4.29/srclib/apr
mv apr-util-1.6.0/ httpd-2.4.29/srclib/apr-util
三、手工编译安装
cd /opt/httpd-2.4.29 ./configure \ --prefix=/usr/local/httpd \ --enable-so \ --enable-rewrite \ --enable-charset-lite \ --enable-cgi make && make install
四、编辑启动脚本
grep -v "#" /usr/local/httpd/bin/apachectl > /etc/init.d/httpd #过滤配置文件中注释信息,拷贝到服务程序目录下 vi /etc/init.d/httpd #在文件最前面插入下面的行 #!/bin/sh # chkconfig:2345 85 21 #description:Apache is a World Wide Web server. chmod +x /etc/init.d/httpd chkconfig --add httpd **#将httpd加入系统服务**
五、优化服务,使系统识别命令
ln -s /usr/local/httpd/conf/httpd.conf /etc/httpd.conf
ln -s /usr/local/httpd/bin/* /usr/local/bin
六、编辑httpd主配置文件
vim /usr/local/httpd/conf/httpd.conf ServerName www.yun.com:80 Listen 192.168.37.130:80
七、开启httpd服务
systemctl stop firewalld.service
setenforce 0
apachectl -t #检查语法
service httpd start
一、安装环境包
yum -y install ncurses-devel autoconf cmake
二、手工编译安装mysql
tar zxvf mysql-5.6.26.tar.gz -C /opt #解压软件包
cd /opt/mysql-5.6.26
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DSYSCONFIDIR=/etc \
-DMYSQL_DATADIR=/home/mysql/ \
-DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock \
make && make install
三、添加系统服务
cp support-files/mysql.server /etc/init.d/mysqld #添加系统服务
chmod 755 /etc/init.d/mysqld #修改执行权限
chkconfig --add /etc/init.d/mysqld #将mysqld添加为系统服务
chkconfig mysqld --level 235 on #
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile #从新加载环境变量
useradd -s /sbin/nologin mysql #建立进程用户mysql
chown -R mysql:mysql /usr/local/mysql/ #修改mysql的属主、属组
四、初始化数据库
/usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--ldata=/var/lib/mysql \
--basedir=/usr/local/mysql \
--datadir=/home/mysql
五、创建软链接
ln -s /var/lib/mysql/mysql.sock /home/mysql/mysql.sock
六、编辑配置文件
vi /etc/init.d/mysqld basedir=/usr/local/mysql datadir=/home/mysql
七、启动mysql服务
service mysqld start
netstat -ntap | grep 3306
一、安装环境包
yum -y install gd libpng pcre libxml2-devel libjpeg-devel libpng-devel fontconfig-devel openssl-devel bzip2-devel
二、手工编译安装php
tar xjvf php-5.6.11.tar.bz2 -C /opt cd /opt/php-5.6.11 ./configure \ --prefix=/usr/local/php5 \ --with-gd \ --with-zlib \ --with-apxs2=/usr/local/httpd/bin/apxs \ --with-mysql=/usr/local/mysql \ --with-config-file-path=/usr/local/php5 \ --enable-mbstring make && make install
三、建立php配置文件
cp php.ini-development /usr/local/php5/php.ini
四、创建软链接
ln -s /usr/local/php5/bin/ /usr/local/bin/
ln -s /usr/local/php5/sbin/ /usr/local/sbin
五、修改apache配置文件
vim /etc/httpd.conf
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps #/etc/httpd.conf 查看是否有php5
DirectoryIndex index.php index.html
六、修改apache首页测试php
<?php phpinfo(); ?> mv index.html index.php #与httpd配置文件中设置要相同
六、重启httpd服务,测试
一、建立数据库test
create database a
二、test数据库给auser用户受权
grant all on a.* to 'auser'@'%' identified by '123123'; #受权
flush privileges; #刷新权限
三、再次修改apache首页访问数据库
vim /usr/local/httpd/htdocs/index.php <?php $link=mysql_connect('192.168.37.130','auser','123123'); if($link) echo "<h1>Success!!</h1>"; else echo "Fail!!"; mysql_close(); ?>
四、重启apache服务,测试数据库链接
一、安装环境包
yum install autoconf -y
二、手工编译安装memcached
tar zxvf memcache-2.2.7.tar.gz -C /opt cd /opt/memcache-2.2.7/ #注意:无configure /usr/local/php5/bin/phpize #增长为PHP模板后再对memcache进行配置 ./configure \ --enable-memcache \ --with-php-config=/usr/local/php5/bin/php-config make && make install /usr/local/php5/lib/php/extensions/no-debug-zts-20131226/ #安装完成后复制此行
三、为PHP添加memcached组件
vim /usr/local/php5/php.ini extension_dir = "ext" #此行下添加 extension_dir ="/usr/local/php5/lib/php/extensions/no-debug-zts-20131226/" #复制内容添加到此处 extension = memcache.so
四、修改apache首页
vim /usr/local/httpd/htdocs/index.php <?php $memcache = new Memcache(); $memcache->connect('192.168.37.128',11211); $memcache->set('key','Memcache test Successful!',0,60); $result = $memcache->get('key'); unset($memcache); echo $result; ?>
五、重启apache服务,测试