memcached与memcache
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。
它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。
Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以
用任何语言来编写,并通过memcached协议与守护进程通信。
memcached作为高速运行的分布式缓存服务器,具有以下的特点。
● 协议简单
● 基于libevent的事件处理
● 内置内存存储方式
● memcached不互相通信的分布式
MemCache的工作流程如下:先检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作;
如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序明确实现);每次更新数据库的同时更新memcached中的数据,保证一致性;当分配给memcached内存空间用完之后,会使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效数据首先被替换,然后再替换掉最近未使用的数据。
实验环境
操作系统 | ip地址 | 服务名称 |
Centos7 | 192.168.60.144/24 | memcached |
Centos7 | 192.168.60.143/24 | LAMP架构、memcache |
win7 | 192.168.60.133/24 | client测试机 |
实验所用软件包
memcached和memcache:链接:https://pan.baidu.com/s/1LdC8b_aieCenVQIWcg-vsA 密码:f9ax
LAMP架构:链接:https://pan.baidu.com/s/18y2cSZe8limO462UCZuXCw 密码:lul9
memcache服务端搭建
1、安装编译环境,解压缩源码包
yum install gcc gcc-c++ make -y #安装编译环境
tar zxf memcached-1.5.6.tar.gz -C /opt/ #解压memcached服务包
tar zxf libevent-2.1.8-stable.tar.gz -C /opt/ #解压libevent事件库包
2、编译libevent和memcached
cd libevent-2.1.8-stable/
./configure --prefix=/usr/local/libevent #编译安装路径即可
make && make install
cd /opt/memcached-1.5.6/
./configuer --prefix=/usr/local/memcached \
--with-libevent=/usr/local/libevent \ #这里要关联事件库的安装位置
make && make install
3、简单优化
ln -s /usr/local/memcached/bin/* /usr/local/bin/ #建立memcached命令软链接
4、开启memcached
memcached -d -m 32m -p 11211 -u root #等同于开启了memcached
注:-d 指定守护进程 -m 指定缓存大小 -p 指定端口 -u 指定管理用户root
netstat -ntap | grep mem #查看端口
5、登陆
yum intall telnet -y #因为登陆需要telnet插件,安装一下
telnet 127.0.0.1 11211 #本地登陆使用127.0.0.1 指定端口11211
6、memcached一些基本命令
这里memcached的操作类似于数据库的操作,下面示例的usrname类似于数据库中的表
● add username 0 0 7 0不设置序列号,0不设置过期时间,7序列号字节长度
● get username #查看,但是查看不到更新因子
● set username 0 0 8 更新(不存在的数值等同于add增加)
● gets username #查看内容格式如下
VALUE username 0 8 1 这个1是更新因子,每更新一次就增加一
● replace username 0 0 5 #更新已经存在的内容,不存在的无法保存
● cas username 0 0 5 3 #检测更新,末尾更新因子要相同,否则不更新,返回EXISTS
● append username 0 0 10 #在原本的数值后追加追加几个数值,只会追加不会更改原本数据
● prepend username 0 0 2 #在原本的数值前追加数值
● delete username #删除
● flush_all #清除所有缓存数据
● stats #显示状态信息
● quit #退出
memcache客户端搭建
客户端需要LAMP架构的支持,因此我们先配置LAMP架构
一、安装Apache
1、解压缩源码包
tar zxf apr-1.6.2.tar.gz -C /opt/
tar zxf apr-util-1.6.0.tar.gz -C /opt/
tar xjf httpd-2.4.29.tar.bz2 -C /opt/
2、移动apr包,编译时需要
cd /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
3、安装编译环境包
yum install gcc gcc-c++ cmake pcre-devel expat-devel perl -y
4、编译
./configure \
--prefix=/usr/local/httpd \
--enable-so --enable-rewrite \
--enable-charset-lite \
--enable-cgi
make && make install
5、复制启动脚本,建立配置文件、命令文件软链接
cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
ln -s /usr/local/httpd/conf/httpd.conf /etc/
ln -s /usr/local/httpd/bin/* /usr/local/bin/
6、修改启动脚本文件和配置文件
vim /etc/init.d/httpd #修改启动脚本
#chkconfig: 35 85 21
#description: Apache is a World Wide Web server
vim /etc/httpd.conf #修改配置文件
ServerName www.example.com:80 #去掉注释
Listen 192.168.60.143:80 #监听本机地址
#Listen 80 #注释掉IPV6的监听
7、开启服务,检查端口
service httpd start
netstat -ntap | grep 80
二、安装mysql5.6
1、解压缩
tar zxf mysql-5.6.26.tar.gz -C /opt/
2、安装编译环境
yum install ncurses-devel autoconf -y
3、编译
cd /opt/mysql-5.6.26 #编译参数如下
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DSYSCONFDIR=/etc \
-DMYSQL_DATADIR=/home/mysql/ \
-DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_SSL=system \
-DMYSQL_TCP_PORT=3306 \
-DENABLE_DOWNLOADS=1 \
-DWITH_SSL=bundled
make && make install #这个时间较长
4、复制配置文件
cp support-files/my-default.cnf /etc/my.cnf
5、复制启动脚本,添加至启动项
cp support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
chkconfig --add /etc/init.d/mysqld
chkconfig mysqld --level 35 on
6、添加环境变量
echo "PATH=$PATH:/usr/local/mysql/bin" >>/etc/profile
source /etc/profile #刷新环境变量,即时生效
7、创建管理用户,指定mysql目录管理用户
Useradd -s /sbin/nologin mysql
chmod -R mysql:mysql /usr/local/mysql/
8、初始化数据库
/usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--ldata=/var/lib/mysql \
--basedir=/usr/local/mysql \
--datadir=/home/mysql
9、建立sock文件软链接
ln -s /var/lib/mysql/mysql.sock /home/mysql/mysql.sock
10、修改启动脚本
vim /etc/init.d/mysql #找到basedir和datadir进行添加
basedir=/usr/local/mysql
datadir=/home/mysql
11、启动mysql,添加mysql密码
service mysql start #启动mysql
netstat -ntap | grep 3306
mysqladmin -u root -p password "123123" #设置密码
三、安装php
1、下载环境包
yum install gd libpng libpng-devel pcre pcre-devel libxml2-devel libjpeg-devel -y
2、解压缩、编译
tar zxf php-5.6.11.tar.gz -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
3、优化
cp php.ini-development /usr/local/php5/php.ini #复制配置文件
ln -s /usr/local/php5/bin/* /usr/local/bin #将php中的命令建立软链接给系统识别
in -s /usr/local/php5/sbin/* /usr/local/sbin
4、修改httpd配置文件,让httpd支持php
/AddType #搜索AddType
AddType application/x-gzip .gz .tgz #在该行下插入,支持PHP
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
#修改httpd识别首页
DirectoryIndex index.html index.php
5、修改首页内容进行测试
cd /usr/local/httpd/htdocs/
mv index.html index.php
vim index.php #添加如下内容
<?php
phpinfo();
?>
6、测试php首页
在网页测试首页 http://192.168.60.136/index.php
7、测试连接数据库
mysql -u root -p 123123 #进入mysql
CREATE DATABASE sky; #创建数据库sky
GRANT all ON sky.* TO 'skyuser'@'%' IDENTIFIED BY 'admin123'; #授权
flush privileges; #刷新权限
8、再次修改测试首页
vim index.php #这里是测试php能否连接mysql,能连接则返回Success!!
<?php
$link=mysql_connect('192.168.60.143','skyuser','admin123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
mysql_close();
?>
9、网页测试能否连接数据库 http://192.168.60.143/index.php
四、客户端安装memcache
1、解压缩
tar zxf memcache-2.2.7.tgz -C /opt/
2、生成配置脚本
cd /opt/memcache-2.2.7/ #这时候里面没有configure的配置脚本
/usr/local/php5/bin/phpize #使用php生成配置脚本
3、配置安装
./configure \
--enable-memcache \
--with-php-config=/usr/local/php5/bin/php-config #指向php
make && make install #安装完成后会显示如下信息,保存
Installing shared extensions: /usr/local/php5/lib/php/extensions/no-debug-zts-20131226/
4、修改php的配置文件
vim /usr/local/php5/php.ini
; extension_dir = "./" #模板
; On windows: #模板
; extension_dir = "ext" #模板,搜索extension,添加如下两行
extension_dir="/usr/local/php5/lib/php/extensions/no-debug-zts-20131226/" #这是我们上一步保存的信息
extension = memcache.so #添加memcache.so模块
5、再次修改httpd首页进行测试
vim index.php #修改首页,测试连接服务端memcached
<?php
$memcache = new Memcache();
$memcache->connect('192.168.60.144',11211); #这里的IP地址填memcached服务端的地址
$memcache->set('key','Memcache test Successfull!',0,60);
$result = $memcache->get('key');
unset($memcache);
echo $result;
?>
service httpd restart #重启httpd服务
6、网页再次测试首页,看能否连接memcached服务器