Memcached简介:
* Memcached是一套开源的高性能分布式内存对象缓存系统,它将所有的数据都存储在内存中,因为在内存中会统一维护一张巨大的Hash表,所以支持任意存储类型的数据。很多网站通过使用 Memcached 提高网站的访问速度,尤其是对于大型的需要频繁访问数据的网站。 * Memcached是典型的C/S架构需要安装Memcached服务端与MemcachedAPI客户端。 * Memcached服务端是用 C语言 编写的,而MemcachedAPI客户端可以用任何语言来编写,如 PHP 、 Python 、 Perl 等,并通过Memcached协议与Memcached服务端进行通信。
- Memcached常用典型架构如下图所示:
-
此架构下的工作过程通俗解释:
当web客户端发送请求到web服务器的应用程序时,应用程序会通过用MemcachedAPI客户端程序库接口去连接Memcached服务器,进而查询数据。如果此时web客户端所请求的数据已经在Memcached服务端中缓存,则Memcached服务端会将数据返回给web客户端;如果数据不存在,则会将web客户端请求发送至 MySQL 数据库,由数据库将请求的数据返回给Memcached以及web客户端,与此同时Memcached服务器也会将数据进行保存,以方便用户下次请求使用。
memcached作为高速运行的分布式缓存服务器,具有以下的特点::
* 协议简单 * 基于libevent的事件处理 * 内置内存存储方式 * memcached不互相通信的分布式
内置内存存储方式:
为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。 由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。 另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。 memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。
Memcached 分布式:
* Memcached 分布式主要依赖 Memcached 的客户端来实现,多个Memcached 客户端服务器是独立的。分布式数据怎么杨来存储是由路由算法决定。 * 当数据到达客户端程序库时,客户端的算法就依据路由算法来决定保存的 Memcached 服务器。读取数据时,客户端依据保存数据的路由算法选择和储存数据时相同的服务器来读取数据。
为什么要使用memcache ?
**由于网站的高并发读写需求,传统的关系型数据库开始出现瓶颈,例如:** 1、对数据库的高并发读写: 关系型数据库本身就是个庞然大物,处理过程非常耗时(如解析 SQL 语句,事务处理等)。如果对关系型数据库进行高并发读写(每秒上万次的访问),那么它是无法承受的。 2、对海量数据的处理: 对于大型的SNS网站,每天有上千万次的数据产生(如twitter, 新浪微博)。对于关系型数据库,如果在一个有上亿条数据的数据表种查找某条记录,效率将非常低。 # 使用memcache能很好的解决以上问题。 在实际使用中,通常把数据库查询的结果保存到Memcache中,下次访问时直接从memcache中读取,而不再进行数据库查询操作,这样就在很大程度上减少了数据库的负担。保存在memcache中的对象实际放置在内存中,这也是memcache如此高效的原因。
实战部署
实验环境准备:
主机 | 操作系统 | IP地址 | 主要软件包 |
---|---|---|---|
Memcached API 客户端 | CentOS 7 | 192.168.138.128 | apr-1.6.2.tar/apr-util-1.6.0.tar/httpd-2.4.29.tar/mysql-5.6.26.tar/php-5.6.11.tar/memcache-2.2.7 |
Memcached 服务端 | CentOS 7 | 192.168.138.138 | libevent-2.1.8-stable.tar.gz 、 memcached-1.5.6.tar.gz |
安装 Memcached 服务端:
1.安装Libevent Libevent是一款跨平台的事件处理接口的封装,可以兼容多个操作系统的事件访问。 Memcached的安装依赖于Libevent,因此需要先完成Libevent的安装。 将下载好的软件包通过winSCP工具复制到根目录下(以下所有的软件包都通过此方法导入,不再一一说明):
解压软件包并开始编译安装: * tar xvf libevent-2.1.8-stable.tar.gz -C /opt/ #解压到 /opt 目录下 * cd /opt/libevent-2.1.8-stable/ ./configure --prefix=/usr/local/libevent #指定安装路径 * make && make install #开始制作,编译安装
到此Libevent 安装完毕!
2.安装 Memcached(采用源码的方式进行安装Memcached的编译安装,安装时需要制定Libevent的安装路径) * tar xvf memcached-1.5.6.tar.gz -C /opt/ * cd /opt/memcached-1.5.6/ ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent #指定安装路径(这里安装需要注意的是,需要指定 Libevent 的安装路径,因为 Memcached 需要依赖它) * make && make install
安装完成!
3.Memcached 优化与启动: * ln -s /usr/local/memcached/bin/* /usr/local/bin/ #建立软连接,方便使用它的命令 * memcached -d -m 32m -p 11211 -u root #启动 memcached(-d:守护进程、-m:指定缓存大小为32M 、-p:指定默认端口11211 、 -u:指定 登陆用户为 root) * netstat -antp | grep memcached #查看启动监听端口
4.关闭防火墙、SE功能: * systemctl stop firewalld.service * setenforce 0
5.Memcached 连接: * yum install telnet -y #需要安装 telnet 软件 * telnet 127.0.0.1 11211 #开始连接本地memcached 11211端口
6.这里将Memcached的一些基本操作命令整理出来如下: * add username 0 0 7 #第一个0:不设置序列号,第二个0:无过期时间,第3个值是,字符长度 * get username #查看username这个值的有效长度 * gets username #查看username 这个值的有效长度和更新因子 * set username 0 0 8 #更新username这个值,有这个值则更新,无则创建 * replace username 0 0 6 #更新username,但是这个username必须存在 * cas username 0 0 7 4 #检查更新,更新因子必须和查询的因子一样才能更新 * append username 0 0 7 #在原有的值后面追加 * prepend username 0 0 2 #在原有的值前面追加 * delete username #删除username * flush_all #清除所有缓存数据 * stats #显示状态信息 * quit #退出
到此 Memcached 服务端安装完毕,下面就需要开始安装 Memcached API 客户端。
安装 Memcached API 客户端:
1.为了使得程序可以直接调用Memcached库和接口,可以使用Memcached扩展组件将Memcached添加为PHP的一个模块。此扩展使用了Libmemcached库提供的API与Memcached服务端进行交互。
**首先客户端需要搭建 LAMP 架构,这里整理出一个 LAMP安装启动脚本,只需将需要的软件包放入/root/目录下,执行脚本即可完成LAMP平台部署** #!/bin/bash #安装LAMP环境 #手工编译安装apache服务 systemctl stop firewalld.service setenforce 0 yum -y install gcc gcc-c++ pcre-devel expat-devel perl tar xvf httpd-2.4.29.tar.bz2 tar xvf apr-1.6.2.tar.gz tar xvf apr-util-1.6.0.tar.gz 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 httpd-2.4.29/ ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi make && make install #优化httpd服务 cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd sed -i '1a #chkconfig:23 85 40\n#description:apache is a web server' /etc/init.d/httpd chmod 755 /etc/init.d/httpd chkconfig --add httpd chkconfig httpd on ln -s /usr/local/httpd/conf/httpd.conf /etc/httpd.conf sed -i '/^#Listen/c Listen 192.168.138.128:80' /usr/local/httpd/conf/httpd.conf sed -i '/Listen 80/s/^/#/' /usr/local/httpd/conf/httpd.conf sed -i '/^#ServerName/s/^#//' /usr/local/httpd/conf/httpd.conf ln -s /usr/local/httpd/bin/* /usr/local/bin/ apachectl -t service httpd start netstat -natp | grep 80 #安装MYSQL yum -y install ncurses-devel cmake bison libaio-devel autoconf cd ~/ tar xvf mysql-5.6.26.tar.gz cd mysql-5.6.26/ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DSYSCONFDIR=/etc -DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock -DMYSQL_DATADIR=/home/mysql make && make install #优化mysql服务 \cp support-files/my-default.cnf /etc/my.cnf cp support-files/mysql.server /etc/init.d/mysqld chmod 755 /etc/init.d/mysqld chkconfig --add /etc/init.d/mysqld chkconfig mysqld --level 235 on echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile source /etc/profile useradd -M -s /sbin/nologin mysql chown -R mysql.mysql /usr/local/mysql #初始化mysql数据库 /usr/local/mysql/scripts/mysql_install_db --user=mysql --ldata=/var/lib/mysql --datadir=/home/mysql --basedir=/usr/local/mysql ln -s /usr/local/mysql/bin/* /usr/local/bin sed -i '/^datadir=/c datadir=/home/mysql' /etc/init.d/mysqld sed -i '/^basedir=/c basedir=/usr/local/mysql' /etc/init.d/mysqld #read -p '开启mysql服务(y/n)' w #if [ $w == y ] #then service mysqld start netstat -antp | grep 3306 #fi #安装php yum -y install gd gd-devel libxml2-devel libjepg-devel libpng-devel libpng zlib-devel cd ~/ tar xvf php-5.6.11.tar.bz2 cd php-5.6.11/ ./configure --prefix=/usr/local/php5 --with-mysql=/usr/local/mysql --with-apxs2=/usr/local/httpd/bin/apxs --with-gd --with-zlib --with-config-file-path=/usr/local/php5 --enable-mbstring make && make install 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/ #配置httpd能够识别支持php sed -i -e '/AddType application\/x-gzip .gz .tgz/a AddType application\/x-httpd-php .php\nAddType application\/x-httpd-php-source .phps' /usr/local/httpd/conf/httpd.conf sed -i '/ DirectoryIndex index.html/c DirectoryIndex index.html index.php' /usr/local/httpd/conf/httpd.conf service httpd restart echo -e "<?php\nphpinfo();\n?>" >/usr/local/httpd/htdocs/index.html mv /usr/local/httpd/htdocs/index.html /usr/local/httpd/htdocs/index.php echo "LAMP环境搭建好了,在网页测试\"http://192.168.138.128/index.php\""
2.LAMP架构搭建完成之后需要重启一下Apache和MySQL,然后再测试访问PHP: * service httpd stop * service httpd start * systemctl stop mysqld.service * systemctl start mysqld.service
3.测试数据库工作是否正常: 进入MySQL给页面赋予权限: * mysql -uroot -p * create database sky; * grant all on sky.* to 'skyuser'@'%' identified by 'admin123'; * flush privileges;
* 编写代码,用网页测试数据库: * vim /usr/local/httpd/htdocs/index.php <?php $link=mysql_connect('192.168.138.128','skyuser','admin123'); if($link) echo "<h1>Success!!</h1>"; else echo "Fail!!"; mysql_close(); ?>
到此LAMP 也搭建完成,下面需要安装 Memcached 客户端软件。
3.安装 Memcached 客户端 * yum install autoconf -y * tar xvf memcache-2.2.7.tgz -C /opt # 解压软件包 * cd /opt/memcache-2.2.7 *提示: memcache-2.2.7.tgz 源码包中默认是没有 configure 配置脚本,需要使用 PHP 的 phpize 脚本生成配置脚本 ,否则没办法 ./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配置文件。 * 修改PHP配置文件,添加 Memcached 组件: * cd /root/php-5.6.11/ * cp php.ini-development /usr/local/php5/php.ini * vim /usr/local/php5/php.ini extension_dir="/usr/local/php5/lib/php/extensions/no-debug-zts-20131226" extension=memcache.so
到此客户端配置全部结束!
接下来客户端检测服务端是否可以连接
* 测试 Memcached API 功能 * 通过编写简单的PHP 测试代码调用 Memcache 程序接口,来测试是否与 Memcached 服务器协同工作,代码如下: * vim /usr/local/httpd/htdocs/index.php <?php $memcache = new Memcache(); $memcache->connect('192.168.138.138',11211); #客户端连接 memcached 服务器 $memcache->set('key','Memcache test Successfull!',0,60); #设置名为 “key”的键的值为Memcache test Successfull ,并读取显示。显示成功 $result = $memcache->get('key'); unset($memcache); echo $result; ?>
测试访问服务器:
到此高性能内存对象缓存 Memcached 搭建成功!
下篇是 Memcached主主复制及 Memcached服务高可用配置。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 高性能缓存服务器 nuster 1.7.9.9 添加缓存 stats 功能
- 设计实现高性能本地内存缓存
- Nuster:高性能缓存服务器
- 基于HAProxy的高性能HTTP缓存服务器和RESTful NoSQL缓存服务器
- 高性能编程:三级缓存(LLC)访问优化
- go语言高性能缓存组件ccache分析
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
SOA & Web 2.0 -- 新商业语言
(美)Sandy Carter / 袁月杨、麻丽莉 / 清华大学出版社 / 2007 / 29.80元
在《SOA&Web 2.0:新商业语言》中,Sandy Calter示范了将企业解构为“组件化”业务模式的方法,然后用相互连接的、可重复的并且能快速、轻松、经济地适应各种变化的IT服务来支持该模式。这些技术将帮助IT专家和业务经理达到崭新的运营水平,以开展着眼于市场的创新,这才是最重要的。总而言之,企业必须实现灵活应对。直到最近,技术都一直阻碍着这些目标的实现。正是由于面向服务架构(SOA)、We......一起来看看 《SOA & Web 2.0 -- 新商业语言》 这本书的介绍吧!