理解高性能内存缓存对象缓存Memcached原理 (Memcached核心概念,部署)

栏目: 数据库 · 发布时间: 5年前

Memcached简介:

* Memcached是一套开源的高性能分布式内存对象缓存系统,它将所有的数据都存储在内存中,因为在内存中会统一维护一张巨大的Hash表,所以支持任意存储类型的数据。很多网站通过使用 Memcached 提高网站的访问速度,尤其是对于大型的需要频繁访问数据的网站。
* Memcached是典型的C/S架构需要安装Memcached服务端与MemcachedAPI客户端。
* Memcached服务端是用 C语言 编写的,而MemcachedAPI客户端可以用任何语言来编写,如 PHPPythonPerl 等,并通过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服务高可用配置。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

性能之巅

性能之巅

Brendan Gregg / 徐章宁、吴寒思、陈磊 / 电子工业出版社 / 2015-8-15 / 128

《性能之巅:洞悉系统、企业与云计算》基于Linux 和Solaris 系统阐述了适用于所有系统的性能理论和方法,Brendan Gregg 将业界普遍承认的性能方法、工具和指标收集于本书之中。阅读本书,你能洞悉系统运作的方式,学习到分析和提高系统与应用程序性能的方法,这些性能方法同样适用于大型企业与云计算这类最为复杂的环境的性能分析与调优。一起来看看 《性能之巅》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具