memcached服务器

memcached简介

memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 为首开发的一款软件。已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、网站显示延迟等重大影响。

这时就该memcached大显身手了。memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
Memcached 的守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。但是它并不提供冗余(例如,复制其hashmap条目);当某个服务器S停止运行或崩溃了,所有存放在S上的键/值对都将丢失。

Memcached由Danga Interactive开发,其最新版本发布于2010年,作者为Anatoly Vorobey和Brad Fitzpatrick。用于提升LiveJournal . com访问速度的。LJ每秒动态页面访问量几千次,用户700万。Memcached将数据库负载大幅度降低,更好的分配资源,更快速访问。
官方网站

Memcached的特性

  • 协议简单
  • 支持epoll/kqueue异步I/O模型,使用libevent作为事件处理通知机制。
  • key/value键值数据类型
  • 全内存缓存,效率高(全部的数据都存放于Memcached服务事先分配好的内存中,无持久化存储的设计,和系统的物理内存一样,当重启系统或Memcached服务时,Memcached内存中的数据会丢失。若希望重启后,数据依然能保留,那么就可以采用redis这样的持久性内存缓存系统)
  • 当内存中缓存的数据容量达到服务启动时设定的内存值时,就自动使用LRU算法删除过期的缓存数据。也可以在存放数据时对存储的数据设置过期时间,这样过期后数据就自动被清除,Memcached服务本身不会监控数据过期,而是在访问的时候查看key的时间戳判断是否过期。

构建memcached服务

在RHEL7系统光盘中包含有memcached,因此需要提前配置yum源,即可直接使用yum安装,客户端测试时需要提前安装telnet远程工具。验证时需要客户端主机安装telnet,远程memcached来验证服务器的功能:

  • add name 0 180 10 //变量不存在则添加
  • set name 0 180 10 //添加或替换变量
  • replace name 0 180 10 //替换
  • get name //读取变量
  • append name 0 180 10 //向变量中追加数据
  • delete name //删除变量
  • flush_all //清空所有
  • 提示:0表示不压缩,180为数据缓存时间,10为需要存储的数据字节数量。
    步骤一:构建memcached服务
    1)使用yum安装软件包memcached
[root@proxy ~]# yum -y  install   memcached   telnet
[root@proxy ~]# rpm -qa memcached
memcached-1.4.15-10.el7_3.1.x86_64
  1. memcached配置文件(查看即可,不需要修改)
[root@proxy ~]# vim /usr/lib/systemd/system/memcached.service
ExecStart=/usr/bin/memcached -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS
[root@proxy ~]# vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""

步骤二:使用telnet访问memcached服务器
1)使用telnet连接服务器测试memcached服务器功能,包括增、删、改、查等操作。

[root@proxy ~]# telnet  192.168.4.5  11211
Trying 192.168.4.5...
……
##提示:0表示不压缩,180为数据缓存时间,3为需要存储的数据字节数量。
set name 0 180 3                //定义变量,变量名称为name
plj                            //输入变量的值,值为plj                
STORED
get name                        //获取变量的值
VALUE name 0 3                 //输出结果
plj
END
##提示:0表示不压缩,180为数据缓存时间,3为需要存储的数据字节数量。
add myname 0 180 10            //新建,myname不存在则添加,存在则报错
set myname 0 180 10            //添加或替换变量
replace myname 0 180 10        //替换,如果myname不存在则报错
get myname                    //读取变量
append myname 0 180 10        //向变量中追加数据
delete myname                    //删除变量
flush_all                        //清空所有
quit                            //退出登录         

LNMP+memcached

如果希望使用PHP来操作memcached,注意必须要为PHP安装memcache扩展(php-pecl-memcache),否则PHP无法解析连接memcached的指令。客户端测试时需要提前安装telnet远程工具。
步骤一:创建PHP页面,使用PHP语言测试memcached服务

1)部署测试页面
创建PHP首页文档/usr/local/nginx/html/mem.php 注意:192.168.2.5是memcached数据库。

 [root@web1 ~]# vim /usr/local/nginx/html/mem.php
<?php
$memcache=new Memcache;                //创建memcache对象
$memcache->connect('192.168.2.5',11211) or die ('could not connect!!');
$memcache->set('key','test');             //定义变量
$get_values=$memcache->get('key');        //获取变量值
echo $get_values;
?>

2)客户端测试(结果会失败)
客户端使用浏览器访问服务器PHP首页文档,检验对memcached的操作是否成功:

[root@web1 ~]# firefox http://192.168.2.100/mem.php

注意:这里因为没有给PHP安装扩展包,默认PHP无法连接memcached数据库,需要给PHP安装扩展模块才可以连接memcached数据库。
3)为web1主机的PHP添加memcache扩展

[root@web1 ~]# yum -y install  php-pecl-memcache
[root@web1 ~]# systemctl restart php-fpm

4)客户端再次测试(结果会成功显示数据结果)

[root@web1 ~]# firefox http://192.168.2.100/mem.php

5)为web2主机的PHP添加memcache扩展

[root@web2 ~]# yum -y install  php-pecl-memcache
[root@web2 ~]# systemctl restart php-fpm

PHP实现session共享

在上面拓扑的基础上 , Nginx服务器除了承担调度器外,还需要担任memcached数据库的角色,并在两台后端LNMP服务器上实现PHP的session会话共享。拓扑结构如图所示。
在这里插入图片描述
步骤一:在后端LNMP服务器上部署Session共享
注意:这些操作在两台后端Web服务器上均需要执行,以下操作以Web1(192.168.2.100)服务器为例。
1)修改PHP-FPM配置文件,并重启服务
注意,因为后端两台web服务器(web1,web2)都需要修改配置文件(下面也web1为例)。

[root@web1 ~]# vim  /etc/php-fpm.d/www.conf            //修改该配置文件的两个参数
//文件的最后2行
修改前效果如下:
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
//原始文件,默认定义Sessoin会话信息本地计算机(默认在/var/lib/php/session)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
修改后效果如下:
php_value[session.save_handler] = memcache
php_value[session.save_path] = "tcp://192.168.2.5:11211"
//定义Session信息存储在公共的memcached服务器上,主机参数中为memcache(没有d)
//通过path参数定义公共的memcached服务器在哪(服务器的IP和端口)
[root@web1 ~]# systemctl  restart  php-fpm

步骤二:客户端测试
客户端使用浏览器访问两台不同的Web服务器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值