memcached实现LNMP对php页面的缓存

说明:准备一台虚拟机,地址为202.207.178.6,已经安装好nginx,并且可以正常启动使用了!

一、安装前准备

1、memcached依赖于libevent API,因此要事先安装之

# tar xf libevent-2.0.20-stable.tar.gz

# cd libevent-2.0.20

# ./configure --prefix=/usr/local/libevent

# make && make install

输出库文件:

# echo "/usr/local/libevent/lib" > /etc/ld.so.conf.d/libevent.conf

# ldconfig

2、要启用sasl,确保已经安装了cyrus-sasl-devel

# yum -y install cyrus-sasl-devel

二、安装配置memcached

1、安装memcached

# tar xf memcached-1.4.15.tar.gz

# cd memcached-1.4.15

# ./configure --enable-sasl --prefix=/usr/local/memcached

--with-libevent=/usr/local/libevent

# make && make install

2、memcached的常用选项说明:

# /usr/local/memcached/bin/memcached

-p <num>: 指定监听的TCP端口,默认为11211

-U <num>:指定监听的UDP端口,默认为11211,0表示关闭UDP端口

-s 本地套接字通信

-l <ip_addr>:指定进程监听的地址

-d: 以服务模式运行

-r 设定最大文件大小限制

-u <username>:以指定的用户身份运行memcached进程

-m <num>:用于缓存数据的最大内存空间,单位为MB,默认为64MB;

-c <num>:最大支持的并发连接数,默认为1024

-t <threads>:用于处理入站请求的最大线程数,仅在memcached编译时开启

了支持线程才有效;

-f <num>:设定Slab Allocator定义预先分配内存空间大小固定的块时使用

的增长因子;

-M:当内存空间不够使用时返回错误信息,而不是按LRU算法利用空间;

-n: 指定最小的slab chunk大小;单位是字节;

-S: 启用sasl进行用户认证;

3、启动memcached:

# /usr/local/memcached/bin/memcached -d -m 128 -n 20 -f 1.25 -vv -u nobody

4、使用telnet命令测试memcached的使用

# telnet 127.0.0.1 11211

add命令:

add keyname flag  timeout  datasize

如:

add mykey 0 30 5

hello

get命令:

get keyname

如:get mykey

VALUE mykey 0 5

hello

END

5、为memcached提供启动脚本 ,将其建立为/etc/init.d/memcached文件:

#!/bin/bash

#

# Init file for memcached

#

# chkconfig: - 86 14

# description: Distributed memory caching daemon

#

# processname: memcached

# config: /etc/sysconfig/memcached

. /etc/rc.d/init.d/functions

## Default variables

PORT="11211"

USER="nobody"

MAXCONN="1024"

CACHESIZE="64"

OPTIONS=""

RETVAL=0

prog="/usr/local/memcached/bin/memcached"

desc="Distributed memory caching"

lockfile="/var/lock/subsys/memcached"

start() {

echo -n $"Starting $desc (memcached): "

daemon $prog -d -p $PORT -u $USER -c $MAXCONN -m $CACHESIZE -o "$OPTIONS"

RETVAL=$?

echo

[ $RETVAL -eq 0 ] && touch $lockfile

return $RETVAL

}

stop() {

echo -n $"Shutting down $desc (memcached): "

killproc $prog

RETVAL=$?

echo

[ $RETVAL -eq 0 ] && rm -f $lockfile

return $RETVAL

}

restart() {

stop

start

}

reload() {

echo -n $"Reloading $desc ($prog): "

killproc $prog -HUP

RETVAL=$?

echo

return $RETVAL

}

case "$1" in

start)

start

;;

stop)

stop

;;

restart)

restart

;;

condrestart)

[ -e $lockfile ] && restart

RETVAL=$?

;;

reload)

reload

;;

status)

status $prog

RETVAL=$?

;;

*)

echo $"Usage: $0 {start|stop|restart|condrestart|status}"

RETVAL=1

esac

exit $RETVAL

6、使用如下命令配置memcached成为系统服务:

# chmod +x /etc/init.d/memcached

# chkconfig --add memcached

# killall memcached

# service memcached start

三、安装MySQL(我这里通过编译安装MySQL-5.6.33(通用二进制格式))

1、将下载好的压缩包解压至/usr/local,并进入此目录

# tar xf mysql-5.6.33-linux-glibc2.5-i686.tar.gz -C /usr/local/

# cd /usr/local/

2、为解压后的目录创建一个链接,并进入此目录

# ln -sv mysql-5.6.33-linux-glibc2.5-i686 mysql

# cd mysql

3、创建MySQL用户(使其成为系统用户)和MySQL组

# groupadd -r -g 306 mysql

# useradd -g 306 -r -u 306 mysql

4、使mysql下的所有文件都属于mysql用户和mysql组

# chown -R mysql.mysql /usr/local/mysql/*

5、创建数据目录,并使其属于mysql用户和mysql组,其他人无权限

# mkdir -p /mydata/data

# chown -R mysql:mysql /mydata/data/

# chmod o-rw /mydata/data/

6、准备就绪,开始安装

# scripts/mysql_install_db --user=mysql --datadir=/mydata/data

7、安装完成后为了安全,更改/usr/local/mysql下所有文件的权限

#chown -R root .

8、准备启动脚本,并使其开机自动启动

# cp support-files/mysql.server /etc/init.d/mysqld

# chkconfig --add mysqld

# chkconfig --list mysqld

9、编辑数据库配置文件

# cp support-files/my-default.cnf /etc/my.cnf

#vim /etc/my.cnf,修改和添加以下内容:

datadir = /mydata/data

innodb_file_per_table = ON

log-bin = master-bin

10、提供执行相关命令所需的环境变量

# vim /etc/profile.d/mysql.sh

添加以下内容:

export PATH=$PATH:/usr/local/mysql/bin

11、至此,MySQL服务配置完成,可以启动测试

# service mysqld start

12、输出库文件(因为要针对mysql进行编译)

# vim /etc/ld.so.conf.d/mysql.conf

添加以下内容:

/usr/local/mysql/lib

# ldconfig -v

13、输出头文件

# ln -sv /usr/local/mysql/include /usr/include/mysql

四、编译安装php-5.5.38:(相关包可以到http://www.php.net/ 下载)

1、安装前准备:

如果出现出现configure:error:xml2-config not found错误:

# yum -y install libxml2-devel

如果出现:configure: error: Please reinstall the BZip2 distribution

# yum -y install bzip2-devel

如果出现:configure: error: Please reinstall the libcurl distribution -

easy.h should be in <curl-dir>/include/curl/

# yum -y install curl-devel

2、将源码包下载至本地,开始安装

# tar xf php-5.5.38.tar.bz2

#cd php-5.5.38

#./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql

--with-openssl --enable-fpm --enable-sockets --enable-sysvshm

--with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring

--with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib

--with-libxml-dir=/usr --enable-xml  --with-config-file-path=/etc

--with-config-file-scan-dir=/etc/php.d --with-bz2 --with-curl

(释义:

--prefix=/usr/local/php 指定php安装目录;

--with-mysql=/usr/local/mysql mysql安装目录,对mysql的支持;

--with-openssl 增加openssl的支持;

--enable-fpm 启用php-fpm

--enable-sockets 打开socket支;

--with-mysqli=/usr/local/mysql/bin/mysql_config mysqlin扩展技术,不仅可以调

用MySQL的存储过程,处理MySQL事物,而且可以使访问数据库工作变得稳定

--enable-mbstring 多字节字符串的支持;

--with-freetype-dir 打开对freetype字体库的支持;

--with-jpeg-dir 对jpeg格式图片的支持;

--with-png-dir 打开对png图片的支持;

--with-zlib 打开对zlib库的支持;

--with-libxml-dir=/usr 打开libxml2库的支持;

--enable-xml 打开对xml的支持;

--with-config-file-path=/etc 指定php.ini(配置文件)位置;

--with-config-file-scan-dir=/etc/php.d 是搜索下面的ini文件php.ini一起用;

--with-bz2 打开对bz2文件的支持;

#make

#make install

3、为php提供配置文件:

# cp php.ini-production /etc/php.ini

4、为php-fpm提供配置文件:

# cp /usr/local/php/etc/php-fpm.conf.default

/usr/local/php/etc/php-fpm.conf

5、编辑php-fpm的配置文件:

# vim /usr/local/php/etc/php-fpm.conf

配置fpm的相关选项为你所需要的值,并启用pid文件(如下最后一行):

pm.max_children = 150

pm.start_servers = 8

pm.min_spare_servers = 5

pm.max_spare_servers = 10

#pid = /usr/local/php/var/run/php-fpm.pid

6、为php-fpm提供Sysv init脚本,并将其添加至服务列表:

# cd php-5.5.38

# cp sapi/fpm/init.d.php-fpm  /etc/rc.d/init.d/php-fpm

# chmod +x /etc/rc.d/init.d/php-fpm

# chkconfig --add php-fpm

# chkconfig php-fpm on

7、接下来就可以启动php-fpm了:

# service php-fpm start

使用如下命令来验正(如果此命令输出有中几个php-fpm进程就说明启动成功了):

# ps aux | grep php-fpm

五、整合nginx和php5

1、编辑/etc/nginx/nginx.conf,启用如下选项:

# vim /etc/nginx/nginx.conf

开启和添加如下几项:

location / {

root /web/htdocs;

index index.php index.html;

}

location ~ \.php$ {

index index.php index.html;

root           /web/htdocs;

fastcgi_pass   127.0.0.1:9000;

fastcgi_index  index.php;

fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

include        fastcgi_params;

}

2、配置好fastcgi_params,确保为以下内容

# vim /etc/nginx/fastcgi_params

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;

fastcgi_param  SERVER_SOFTWARE    nginx;

fastcgi_param  QUERY_STRING       $query_string;

fastcgi_param  REQUEST_METHOD     $request_method;

fastcgi_param  CONTENT_TYPE       $content_type;

fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;

fastcgi_param  REQUEST_URI        $request_uri;

fastcgi_param  DOCUMENT_URI       $document_uri;

fastcgi_param  DOCUMENT_ROOT      $document_root;

fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  REMOTE_ADDR        $remote_addr;

fastcgi_param  REMOTE_PORT        $remote_port;

fastcgi_param  SERVER_ADDR        $server_addr;

fastcgi_param  SERVER_PORT        $server_port;

fastcgi_param  SERVER_NAME        $server_name;

3、提供访问页面

# vim /web/htdocs/index.php

<h1>FSY PAGE<h1>

<?php

phpinfo();

?>

4、而后重新载入nginx的配置文件:

# service nginx reload

接着就可以通过浏览器访问此测试页面了!

六、安装Memcache的PHP扩展

1、安装PHP的memcache扩展

# tar xf memcache-2.2.5.tgz

# cd memcache-2.2.5

#/usr/local/php/bin/phpize

# ./configure --with-php-config=/usr/local/php/bin/php-config

--enable-memcache

# make && make install

上述安装完后会有类似以下的提示:

Installing shared extensions:                                /usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/

2、编辑/etc/php.d/memcache.ini,添加如下一行来载入memcache扩展:

extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/memcache.so

3、重启php-fpm,并进行访问测试

# service php-fpm restart

此时访问202.207.178.6,会发现memcache模块已经加载上了!

4、对memcached功能进行测试,在网站目录中建立测试页面test.php,添加如下内容:

# vim /web/htdocs/test.php

<?php

$mem = new Memcache;

$mem->connect("127.0.0.1", 11211)  or die("Could not connect");

$version = $mem->getVersion();

echo "Server‘s version: ".$version."<br/>\n";

$mem->set(‘testkey‘, ‘Hello World‘, 0, 600) or die("Failed to save             data at the memcached server");

echo "Store data in the cache (data will expire in 600seconds)

<br/>\n";

$get_result = $mem->get(‘testkey‘);

echo "$get_result is from memcached server.";

?>

此时访问http://202.207.178.6/test.php如果有输出“Hello World is from memcached.”等信息,则表明memcache已经能够正常工作。

欢迎批评指正!

时间: 2024-10-11 21:18:02

memcached实现LNMP对php页面的缓存的相关文章

windows使用nginx+memcached实现负载均衡和session或者缓存共享

windows使用nginx+memcached实现负载均衡和session或者缓存共享 两台服务器 服务器1:115.29.186.215 windows2008 64位操作系统 服务器2:114.215.193.64 windows2008 32位操作系统 其中服务器1同时做nginx负载均衡服务器 使用概要:由于两台服务器:所以数据库连接可以使用一台服务器: 由于本人使用的ibatis框架:所以在数据库层使用ibatis Cache 这样就可以使用一台sql服务器:两台服务器访问都是缓存数

ehcache 页面整体缓存和局部缓存

页面缓存是否有必要?. 这样说吧,几乎所有的网站的首页都是访问率最高的,而首页上的数据来源又是非常广泛的,大多数来自不同的对象,而且有可能来自不同的db ,所以给首页做缓存是很必要的.那么主页的缓存策略应该怎样设计呢?我认为应该是某个固定时间之内不变的,比如说2分钟更新一次.那么这个缓存应该做在什么地方呢?让我们来看一下,当前我们的的应用的结构一般是是page-filter-action-service-dao-db ,这个过程中的- 的地方都是可以做缓存的地方,根据页面缓存的特征,应该把页面缓

页面的缓存与不缓存设置

HTML的HTTP协议头信息中控制着页面在几个地方的缓存信息,包括浏览器 端,中间缓存服务器端(如:squid等),Web服务器端.本文讨论头信息 中带缓存控制信息的HTML页面(JSP/Servlet生成好出来的也是HTML页面)在中间缓存服务器中的缓存情况. HTTP协议中关于缓存的信息头关键字包括Cache-Control(HTTP1.1),Pragma(HTTP1.0),last-Modified,Expires等. HTTP1.0中通过Pragma 控制页面缓存,可以设置:Pragma

设置页面不缓存 no-cache

html中设置方法 <head> <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"> <META HTTP-EQUIV="Expires" CONTENT="0"> </head> j

asp.net页面清除缓存2(转)

ASP.NET 提供三种主要形式的缓存:页面级输出缓存.用户控件级输出缓存(或称为片段缓存)和缓存 API. 输出缓存和片段缓存的优点是非常易于实现,在大多数情况下,使用这两种缓存就足够了.而缓存 API 则提供了额外的灵活性(实际上是相当大的灵活性),可用于在应用程序的每一层利用缓存. Steve 的缓存提示 尽早缓存:经常缓存 您应该在应用程序的每一层都实现缓存.向数据层.业务逻辑层.UI 或输出层添加缓存支持.内存现在非常便宜 — 因此,通过以智能的方式在整个应用程序中实现缓存,可以获得很

asp.net页面清除缓存1

1.页面每次打开页面的时候都要清除本页面的缓存 页面打开时候,由于缓存的存在,刚刚更新的数据有时无法在页面得到刷新,当这个页面作为模式窗口打开问题更加明显 2.asp.net页面缓存的清除 ASP.NET清除页面缓存 (1) Response.Buffer = true;Response.ExpiresAbsolute = System.DateTime.Now.AddSeconds(-1);Response.Expires = 0;Response.CacheControl = "no-cac

HTML页面和JSP页面禁止缓存

一.JSP页面禁止缓存: 防止浏览器缓存当前访问的JSP动态页面,可以采用如下的方式进行设置,此效果如下的“HTML禁止缓存”: % 将过期日期设置为一个过去时间response.setHeader(Expires, Sat, 6 May 1995 120000 GMT); 设置 HTTP1.1 no-cache 头response.setHeader(Cache-Control, no-store,no-cache,must-revalidate); 设置 IE 扩展 HTTP1.1 no-c

使用页面不缓存的方法

使用户退出系统时不能通过"后退"按钮重新返回使用页面不缓存的方法:页面上<meta http-equiv='Expires' content='0'> <meta http-equiv='Pragma' content='no-cache'> <meta http-equiv='Cache-Control' content='no-cache'> Servlet类里response.setHeader("Cache-Control"

WP8.1 页面导航 缓存问题

最近开始学习wp8.1开发,在页面的导航学习时发现了一点问题,即当使用Frame.Navigate()方法进行页面的跳转时,每次都会重新实例化一个页面.而在新的页面采用Frame.GoBack()或者GoForward()方法同样是新生成一个Page.无法缓存. 经过测试,发现是由于Page的NavigationCacheMode属性需要设置,将其NavigationCacheMode设置为Enabled(需要设置Frame的Cache值)或者Required,即可使得该页面可以缓存.