Memcached模块介绍

      Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。



      通俗了说就是让客户端的nginx请求去memcached服务器获取缓存数据,而不用连接数据库。若请求的数据memcached没有,nginx会去连接数据库获取数据,同时php会将请求的url作为key,数据作为value的形式存储一份到memcached,用于之后的资源获取。

安装介绍

我使用非root用户进行此次安装,故很多命令涉及到sudo赋权

Memcached模块加载将从以下四点来实现

1. 安装nginx+php
2. Memcached服务器的安装
3. php端Memcache模块扩展
4. 测试页面获取

用到两台虚拟机

10.1.1.1 centos7.5 Memcached服务器

10.1.1.2 centos7.5 nginx+php+Memcache模块

安装nginx+php

请参考以下链接 https://www.cnblogs.com/huandada/p/10114722.html

注:在php编译时要加上--with-config-file-path=/usr/local/php/etc 参数,不然php找不到配置路径,在本文最后会详讲此处报错。

Memcached服务器的安装(10.1.1.1)

下载yum源

cd /etc/yum.repos.d/
sudo wget http://mirrors.aliyun.com/repo/Centos-7.repo
sudo wget http://mirrors.aliyun.com/repo/epel-7.repo

安装套件与依赖包

sudo yum install -y apr* autoconf automake bison cpp curl curl-devel fontconfig fontconfig-devel freetype freetype* freetype-devel gcc gcc-c++ gtk+-devel gd gettext gettext-devel glibc kernel kernel-headers keyutils keyutils-libs-devel krb5-devel libcom_err-devel libpng* libjpeg* libsepol-devel libselinux-devel libstdc++-devel libtool* libgomp libxml2 libxml2-devel libXpm* libtiff libtiff* libX* make mpfr ncurses* ntp openssl openssl-devel patch pcre-devel perl php-common php-gd policycoreutils ppl telnet t1lib t1lib* nasm nasm* wget zlib-devel gmp-devel

安装libevent

Memcached要用到libevent库来进行Socket处理

sudo yum install -y  libevent libevent-devel

安装memcached

wget http://www.memcached.org/files/memcached-1.4.25.tar.gz
tar -xvf memcached-1.4.25.tar.gz
./configure --prefix=/usr/local/memcached
sudo make
sudo make install
sudo ln -s /usr/local/memcached/bin/memcached /usr/local/bin/memcached

创建mecached用户

sudo groupadd memcached
sudo useradd -g memcached memcached -s /bin/nologin

启动memcached服务

sudo /usr/local/bin/memcached -d -m 4096 -p 11211 -u memcached

停止memcached服务

sudo killall memcached

服务启动参数说明

-d 选项是启动一个守护进程,
-m 是分配给Memcache使用的内存数量,单位是MB,这里是1024MB,默认是64MB
-u 是运行Memcache的用户,也可以是root
-l 是监听的服务器IP地址,默认应该是本机
-p 是设置Memcache监听的端口,默认是11211
-c 选项是最大运行的并发连接数,默认是1024
-P 是设置保存Memcache的pid文件位置
-h 打印帮助信息
-v 输出警告和错误信息
-vv 打印客户端的请求和返回信息

Memcached操作key/value的几种基本命令

set
add
replace
get
delete

用法

command <key> <flags> <expiration time> <bytes>
<value>
参数说明如下:
command set/add/replace
key key 用于查找缓存值
flags 可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息
expiration time 在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
bytes 在缓存中存储的字节点
value 存储的值(始终位于第二行)

首先连接11211端口,得到交互界面,用quit结束交互

telnet 127.0.0.1 11211
set user 0 600 2 #设置key为user,flag 0,存储600s,占用2个字节
yh #value为yh get user #根据key user搜索对应的value值
yh quit #退出

php端Memcache模块扩展(10.1.1.2)

下载memcache软件包(不是memcached)

wget http://pecl.php.net/get/memcache-2.2.7.tgz
tar -xvf memcache-2.2.7.tgz

phpize是一个脚本,用来扩展php扩展模块的,通过phpize可以建立php的外挂模块

cd memcache-2.2.7
/usr/local/php/bin/phpize

./configure --with-php-config=/usr/local/php/bin/php-config
sudo make

执行make install 可以得到扩展模块所在路径(注:每台机子路径不一样,请使用你得到的路径)

sudo make install

查看模块文件

ll /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/
-rwxr-xr-x 1 root root 291144 Dec 27 15:18 memcache.so

在php.ini中添加扩展模块,php.ini文件可以从源码包cp到编译所定义的配置文件路径下

sudo  cp /home/xx/php-5.6.39/php.ini-development /usr/local/php/etc/php.ini
sudo vim /usr/local/php/etc/php.ini
extension=/你的扩展模块路径/memcache.so #添加此行

配置nginx.conf

sudo vim /usr/local/nginx/conf/nginx.conf
#增加以下配置
location / {
#设置key
set $memcached_key "$uri";
#根据key查找对应的服务器
memcached_pass 10.2.8.70:11211;
#出错的时候回调php,查找数据库中的数据
error_page 404 /callback.php;
}

重启服务

sudo killall php-fpm
sudo /usr/local/php/sbin/php-fpm
sudo killall nginx
sudo /usr/local/nginx/sbin/nginx

查看模块是否加载

sudo vim  /usr/local/nginx/html/info.php
<?php
phpinfo()
?>

查看页面http:ip:80/info.php,有如下内容,即加载成功

测试

添加测试页面

sudo vim /usr/local/nginx/html/callback.php
<?php
$mem = new memcache;
$mem->connect ('10.2.8.70', 11211);
$mem->set('test','hello world!', 0, 12);
$val = $mem->get('test');
echo $val;
?>

访问http:ip:80/callback.php

得到 hello world!

配置完成

错点梳理

  1. php的memcache扩展部分sudo /usr/local/php/bin/phpize报错

    Cannot find config.m4........

    解决思路:memcached-1.4.25.tar.gz包不对,换个包memcache-2.2.7.tgz就好了

  2. cp php.ini文件添加模块后,phpinfo()页面没有memcache模块

    解决思路:

    查看phpinfo页面发现没有配置文件路径



    在php编译时加上--with-config-file-path=/usr/local/php/etc 参数



    重启php-fpm,问题解决

  3. 访问页面测试报错

    解决思路

    phpinfo()页面或 sudo /usr/local/php/bin/php -m查看php是否加载该模块,若没有加载,可能是php.ini文件没生效,没生效的原因就是以上第2点。

php的Memcached模块扩展的更多相关文章

  1. php的imagick模块扩展

    imagick模块介绍       ImageMagick是一个用于查看.编辑位图文件以及进行图像格式转换的开放源代码软件套装.它可以读取.编辑超过100种图象格式,可用来替换GD库. 安装 在加载模 ...

  2. nginx/php的redis模块扩展

    redis模块介绍 redis2-nginx-module 可以实现 Nginx 以非阻塞方式直接防问远方的 Redis 服务,可以启用强大的 Redis 连接池功能,进而实现更多的连接与更快速的访问 ...

  3. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十一:PS/2模块⑤ — 扩展鼠标

    实验十一:PS/2模块⑤ — 扩展鼠标 当普通鼠标即三键鼠标再也无法满足需求的时候,扩展鼠标即滚轮鼠标就诞生了,然而实验十一的实验目的就是实现滚轮鼠标的驱动.不过,进入整体之前,先让我们来了解一下鼠标 ...

  4. 高性能Web服务器Nginx的配置与部署研究(13)应用模块之Memcached模块+Proxy_Cache双层缓存模式

    通过<高性能Web服务器Nginx的配置与部署研究——(11)应用模块之Memcached模块的两大应用场景>一文,我们知道Nginx从Memcached读取数据的方式,如果命中,那么效率 ...

  5. 高性能Web服务器Nginx的配置与部署研究(11)应用模块之Memcached模块的两大应用场景

    一.应用场景1 最近在一个项目中,用到了Nginx的Memcached模块,所以就在这个系列教程中提前把Memcached模块拿出来写了.另外发现最近我的 博客文章频频被很多用采集器的网站拿走,帮我发 ...

  6. Memcached在Linux系统下的安装和PHP开启 Memcached的 扩展 超级解决方案

    [项目背景]:阿里云ECS服务器,Linux(centos7.2 64位),环境部署使用的是阿里云一键安装包(LAMP)等 [项目需求]:linux安装memcached 和php开启Memcache ...

  7. memcached php扩展(二)

    memcached php扩展(二) 安装环境链接:http://pan.baidu.com/s/1i4IbJox Memecached 服务器安装(一) memcached php扩展(二) red ...

  8. 安装php的memcached模块和扩展支持sasl

    memcached的1.2.4及以上增加了CAS(Check and Set)协议,对于同一key的多进行程的并发处理问题.这种情况其实根数据库很像,如果同时有几个进程对同一个表的同一数据进行更新的话 ...

  9. 安装memcache及php的memcached模块

    下载链接: http://pan.baidu.com/s/1o6MA8lG http://pan.baidu.com/s/1qWO8tMs http://pan.baidu.com/s/1c0iZu1 ...

随机推荐

  1. jQuery使用(十一):jQuery实例遍历与索引

    each() children() index() 一.jQuery实例遍历方法each() jQuery实例上的each()方法规定要运行的函数,并且给函数传入两个参数:index,element. ...

  2. CSS BFC(格式化上下文)深入理解

    什么是BFC 在解释BFC之前,先说一下文档流.我们常说的文档流其实分为定位流.浮动流和普通流三种.而普通流其实就是指BFC中的FC.FC是formatting context的首字母缩写,直译过来是 ...

  3. Python面向对象进阶和socket网络编程-day08

    写在前面 上课第八天,打卡: 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese: def __i ...

  4. ASP.NET Web API 2 之路由配置

    Ø  简介 ASP.NET Web API 路由配置也是必须掌握的技术点之一,要真正的完全掌握和理解它也是需要一定的过程的.不过,在平常的开发过程中,对它有基本的了解就足够了.因为我们主要关注点并不在 ...

  5. 设计模式八: 委派(Delegate)

    简介 委派模式不属于GOF23种设计模式, 主要角色有三种: 抽象任务角色, 委派者角色, 具体任务角色. 实现层面上, 定义一个抽象接口, 它有若干实现类, 他们真正执行业务方法, 这些子类是具体任 ...

  6. vim配置(使用Vundle)

    1.前言 Vim的配置文件位于~/.vimrc,文件使用VimScript语法来编写. 2. vim插件管理 Vundle是一个全自动的插件管理器,让我们通过维护插件列表的方式管理插件.它为安装.更新 ...

  7. 4. SpringBoot —— 单元测试

    首先在pom文件中引入spring-boot-starter-test <dependency> <groupId>org.springframework.boot</g ...

  8. springboot项目中如何在pom文件覆盖starter中默认指定的jar版本号

    分两种情况: 1.项目继承自spring-boot-starter-parent  通过定义properties的方式改变starter中的默认版本 <!-- Inherit defaults ...

  9. canvas图片与img图片的相互转换

    最近在一个项目中,遇到了一个问题,需要把生成的canvas形式的二维码转换为图片,可以长按识别,保存等.查找了一些资料归纳总结了一些知识. 默认在jq库里进行,引入jquery.qrcode.min. ...

  10. 软件工程课开学测试——根据已有的CSS模板资源,搭建整个系统

    日期:2019.2.28 博客期:038 星期四 今天的测试得到了9.5分,将将及格的程度吧!本次程序完成的很不成功! <%@ page language="java" co ...