Memcached简介: * Memcached是一套开源的高性能分布式内存对象缓存系统,它将所有的数据都存储在内存中,因为在内存中会统一维护一张巨大的Hash表,所以支持任意存储类型的数据。很多网站通过使用Memcached提高网站的访问速度,尤其是对于大型的需要频繁访问数据的网站。 * Memcached是典型的C/S架构需要安装Memcached服务端与MemcachedAPI客户端。 * Memcached服务端是用C语言编写的,而MemcachedAPI客户端可以用任何语言来编写,phppython、Perl等,并通过Memcached协议与Memcached服务端进行通信。 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 服务器。读取数据时,客户端依据保存数据的路由算法选择和储存数据时相同的服务器来读取数据。
理解高性能内存缓存对象缓存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工具复制到根目录下(以下所有的软件包都通过此方法导入,不再一一说明):
理解高性能内存缓存对象缓存Memcached原理 (Memcached核心概念,部署)
解压软件包并开始编译安装: * 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 #开始制作,编译安装
理解高性能内存缓存对象缓存Memcached原理 (Memcached核心概念,部署)
到此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
理解高性能内存缓存对象缓存Memcached原理 (Memcached核心概念,部署)
理解高性能内存缓存对象缓存Memcached原理 (Memcached核心概念,部署)
安装完成! 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 #查看启动监听端口
理解高性能内存缓存对象缓存Memcached原理 (Memcached核心概念,部署)
4.关闭防火墙、SE功能: * systemctl stop firewalld.service * setenforce 0 5.Memcached 连接: * yum install telnet -y #需要安装 telnet 软件 * telnet 127.0.0.1 11211 #开始连接本地memcached 11211端口
理解高性能内存缓存对象缓存Memcached原理 (Memcached核心概念,部署)
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\""
理解高性能内存缓存对象缓存Memcached原理 (Memcached核心概念,部署)
理解高性能内存缓存对象缓存Memcached原理 (Memcached核心概念,部署)
2.LAMP架构搭建完成之后需要重启一下Apache和MySQL,然后再测试访问PHP: * service httpd stop * service httpd start * systemctl stop mysqld.service * systemctl start mysqld.service
理解高性能内存缓存对象缓存Memcached原理 (Memcached核心概念,部署)
3.测试数据库工作是否正常: 进入MySQL给页面赋予权限: * mysql -uroot -p * create database sky; * grant all on sky.* to 'skyuser'@'%' identified by 'admin123'; * flush privileges;
理解高性能内存缓存对象缓存Memcached原理 (Memcached核心概念,部署)
* 编写代码,用网页测试数据库: * 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(); ?>
理解高性能内存缓存对象缓存Memcached原理 (Memcached核心概念,部署)
理解高性能内存缓存对象缓存Memcached原理 (Memcached核心概念,部署)
到此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 # 开始编译
理解高性能内存缓存对象缓存Memcached原理 (Memcached核心概念,部署)
理解高性能内存缓存对象缓存Memcached原理 (Memcached核心概念,部署)
* /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原理 (Memcached核心概念,部署)
到此客户端配置全部结束! 接下来客户端检测服务端是否可以连接 * 测试 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原理 (Memcached核心概念,部署)

到此高性能内存对象缓存 Memcached 搭建成功!

下篇是 Memcached主主复制及 Memcached服务高可用配置。

本文开发(php)相关术语:php代码审计工具 php开发工程师 移动开发者大会 移动互联网开发 web开发工程师 软件开发流程 软件开发工程师

代码区博客精选文章
分页:12
转载请注明
本文标题:理解高性能内存缓存对象缓存Memcached原理 (Memcached核心概念,部署)
本站链接:https://www.codesec.net/view/621028.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 开发(php) | 评论(0) | 阅读(88)