Memcache服务搭建
Memcache
Memcache的作用网上资料都讲的很好,说简单点就是减轻读取数据库的压力,原理也很简单:
被请求的数据会先到memcache里去取,如果没有就去数据库里取,顺便给memcache带一份。
每次更新数据也先更新memcache里的数据,如果没有则更新数据库,同时更新memcache。
因此需要注意的是这个数据是易失去性存储的。
模式和端口
Memcache是一个基于C/S的结构:
服务端:使用Memcached软件
客户端:使用Memcache插件 (这个插件是结合后端语言比如php python java)
服务端口:11211(可改)
软件清单:
libevent依赖库 http://libevent.org/
memcache插件 http://pecl.php.net/package/memcache/
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:宋体;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-font-kerning:1.0pt;}
memcached服务 http://www.memcached.org/
lamp环境 yum -y install httpd php php-mysql mysql-server
操作系统 CentOS-6.5(x86_64)
1.将上传相关软件包,安装lamp环境
yum -y install httpd php php-mysql mysql-server /etc/init.d/httpd start echo "<?php phpinfo()?>" > /var/www/html/index.php
然后用浏览器访问查看php信息,在信息里面是找不到memcache的
2.安装libevent插件
tar xf libevent-2.0.-stable.tar.gz cd libevent-2.0.-stable ./configure --prefix=/usr/local/libevent && make && make install
3.安装memcached服务端
tar xf memcached-1.4..tar.gz cd memcached-1.4. ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent/ make && make install
安装好后会在/usr/local/memcached/bin/目录下生成memcached
4.配置环境变量
cd /etc/profile.d/ vim mem.sh export PATH="/usr/local/memcached/bin:$PATH" #写入profile文件开机自动导入 memcached -m -p -d -c -u root #m分出内存大小 p 端口 d 混合模式 c 最大连接数 netstat -anptu | grep memcached #查看是否启动,运行多实例更改端口即可 free -m #可以看到内存越来越少,因为被分配出去了 ps -aux | grep memcached #查看进程pid是多少 kill - #关闭memcached服务 pkill memcached #同上
5.memcached使用
yum -y install nc telnet
1)使用nc命令连接memcache
printf "set first 0 30 5\r\nmmmmm\r\n" | nc 127.0.0.1 #存数据 (字段分别为 key,标志,效期,长度,值 ) printf "get first\r\n" | nc 127.0.0.1 #取数据
2)使用telnet命令连接memcache
telnet 127.0.0.1 #然后就可以使用相关的memcached命令了
6.下面是关于memcached相关的操作命令
add key1 0 30 3 #添加数据30为效期(如果写0表示永不过期) 3为大小
set key1 0 30 3 #更新数据,不存在会自动创建
replace key1 0 30 3 #更新数据,不存在会报错
delete key1 #删除数据
get key1 #获取数据
gets key 1 #获取更多信息
stats setting #查看配置信息
stats slabs #查看slab
stats items #查看item
stats size #查看大小
7.安装memcache客户端php插件
安装phpize命令可以为php添加新模块
如果不知道是什么包可以使用 yum provides */phpize
yum -y install php-devel tar xf memcache-2.2..tgz cd memcache-2.2. phpize #打模块,生成configure等文件 which php-config #查看php-config路径位置 ./configure --enable-memcache --with-php-config=/usr/bin/php-config make && make install
安装号后模块会被安装置/usr/lib64/php/modules/memcache.so
cd /etc/php.d/ cp mysql.ini memcache.ini #vim进行编辑将extension的值设置成memcache.so
重启服务后可以看到php已经支持了memcache模块了
8.后面可以结合php网站测试数据库相关
tar xf memcache_page.tar.gz -C /var/www/html/ cd !$
测试页面有 mysql_connect.php 编辑一下
因此需要先把mysql的用户设置一下
/etc/init.d/mysqld start mysql_secure_installation
或者自己在数据库里
grant all on *.* to 'root'@'127.0.0.1' identified by '' flush privileges
然后浏览器访问mysql_connect.php
对接成功
这里可以阅读read.php和write.php了解memcache的读写原理
read.php
<?php
$memcachehost = '192.168.1.113';
$memcacheport = 11211;
$memcachelife = 60; #memcache默认有效期
$memcache = new Memcache;
$memcache->connect($memcachehost,$memcacheport) or die ("Could not connect"); #连接memcache服务器
$num=$_POST["num"];
$db=db1;
$tb=T1;
$query="select * from $tb where ID=$num"; #mysql查询语句
#$key=md5($query);
$key=md5($num); #对参数进行加密,可以看出memcache存储的值是进过加密的
if(!$memcache->get($key)) #尝试先从memcache取值,如果没有去数据库取,顺便给memcache来一份
{
$conn=mysql_connect("127.0.0.1","root","123456");
mysql_select_db($db);
$result=mysql_query($query);
# echo "mysql $num";
while ($row=mysql_fetch_assoc($result))
{
$arr[]=$row;
}
$f = 'mysql';
$memcache->add($key,serialize($arr),0,30);
$data = $arr ;
}
else{
$f = 'memcache';
$data_mem=$memcache->get($key);
$data = unserialize($data_mem);
}
echo "$f $num";
echo "key is $key";
echo "<br>";
?>
write.php
<?php
$memcachehost = '192.168.1.113';
$memcacheport = 11211;
$memcachelife = 60;
$memcache = new Memcache;
$memcache->connect($memcachehost,$memcacheport) or die ("Could not connect");
$num=$_POST["num"];
$db=db1;
$tb=T1;
$query="insert into $tb values($num)";
#$key=md5($query);
$key=md5($num);
if(!$memcache->get($key)) //先尝试更新memcache,如果不存在,则再去更新数据库,同时更新存储到memcachce
{
$conn=mysql_connect("127.0.0.1","root","123456");
mysql_select_db($db);
$result=mysql_query($query); while ($row=mysql_fetch_assoc($result))
{
$arr[]=$row;
}
$f = 'mysql';
$memcache->add($key,serialize($arr),0,30); //mysql 插入成功后,插入 memcached
$data = $arr ;
#}
#else{
$f1 = 'memcache';
$data_mem=$memcache->get($key);
$data = unserialize($data_mem);
}
echo "$f $f1 $num";
echo "<br>";
?>
关于php memcache简单用法参见http://www.cnblogs.com/demonxian3/p/6868361.html
上面两个php里可以看到调用了数据库的db1 和 表T1因此需要创建一下
seq > /tmp/sum #创建1-999的测试数据
连接数据库导入数据
create database db1; create T1(id int)engine=innodb; load data infile '/tmp/sum' into table T1; #导入测试数据
科普一下:使用history查看历史命令,输入!+数字可以执行编号的那条命令
!
用浏览器来访问那个测试页面
测试读取数据,从数据库里查询出id为5的值
后退再去取一次
测试写入数据
最后给大家推荐一款很好用的memcache管理工具:memadmin php写的
搭建memcache过程可能会出现的问题:
执行 memcached 启动命令时,报错,提示:error while loading shared libraries: libevent-2.1.so.6: cannot open shared object file: No such file or directory
- 查看 memcached 命令缺失什么库
ldd /usr/local/memcached/bin/memcached
结果: libevent-2.1.so.6 模块找不到
- 查看 libevent-2.1.so.6 是否存在
locate libevent-2.1.so.
结果: 系统已经安装了该模块,在路径 /usr/local/lib/
- 查看 memcached 查找依赖库的路径
LD_DEBUG=libs /usr/local/memcached/bin/memcached -v
结果: 在 /lib64/ 目录中查找,所以找不到已经安装好的
- 映射 libevent-2.1.so.6 到 /lib64 路径中
ln -s /usr/local/lib/libevent-2.1.so. /usr/lib64/libevent-2.1.so.
结果:这样处理后,memcached就可以搜索到该文件了
- 启动memcached服务
/etc/init.d/memcached restart
Memcache服务搭建的更多相关文章
- linux上部署rmi+memcache服务
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/50020437 最近在学习linux上搭建Rmi+Memca ...
- ServiceStack.Hello——跨平台.net REST api服务搭建
ServiceStack.Hello--跨平台.net REST api服务搭建 自己创建: https://github.com/ServiceStack/ServiceStack/wiki/Cre ...
- WCFRESTFul服务搭建及实现增删改查
WCFRESTFul服务搭建及实现增删改查 RESTful Wcf是一种基于Http协议的服务架构风格, RESTful 的服务通常是架构层面上的考虑. 因为它天生就具有很好的跨平台跨语言的集成能力 ...
- 微信小程序语音识别服务搭建全过程解析(项目开源在github)
silk v3录音转olami语音识别和语义处理的api服务(ubuntu16.04服务器上实现) ## 重要的写在前面 重要事项一: 目前本文中提到的API已支持微信小程序录音文件格式:silk v ...
- 微信小程序语音识别服务搭建全过程解析(https api开放,支持新接口mp3录音、老接口silk录音)
silk v3(或新录音接口mp3)录音转olami语音识别和语义处理的api服务(ubuntu16.04服务器上实现) 重要的写在前面 重要事项一: 所有相关更新,我优先更新到我个人博客中,其它地方 ...
- Git服务搭建及github使用教程
.pos { position: fixed; top: 35%; left: 90% } .pos a { border: 2px solid white; background: #99CCFF; ...
- eureka服务搭建
Server端 引入eureka server的maven依赖 引入依赖时无需给定eureka的版本号,maven会根据当前使用的SpringCloud版本来判断应该引入哪个版本的euraka ser ...
- NodeJs之服务搭建与数据库连接
NodeJs之服务搭建与数据库连接 一,介绍与需求分析 1.1,介绍 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻 ...
- JumpServer1.0 服务搭建
JumpServer1.0 服务搭建 系统环境配置 setenforce 0 systemctl stop iptables.service systemctl stop firewalld.serv ...
随机推荐
- UNIX基础上
时光飞逝,转眼已经毕业快2年了,觉得自己学的东西多却不精.对此深深的思考一下,觉得有必要连载unix环境编程文章,以此激励自己学习.在此立贴为证,2天一篇博客从零开始阐述unix的环境编程. 参考书籍 ...
- Centos安装MySql、Java、Tomcat
一.安装MySql 安装MySql yum install -y mysql-server mysql mysql-devel 启动MySql服务 service mysqld start 为root ...
- C#对文件操作(基本的读写以及压缩和解压)
主要是针对单个文件进行读写操作和压缩操作:用到的主要C#类有FileStream.FileInfo.StreamWrite.StreamRead.GZipStream. 字符数组和字节数组的转换: ] ...
- 进入html+css世界的正确姿势
今天,我带大家一起走进html+css的世界. HTML其实是HyperText Markup Language的缩写, 超文本标记语言.他是用于告诉浏览器这是一个网页, 也就是说告诉浏览器我是一个H ...
- OCR文字识别帮助录入文字信息
OCR文字识别是指将图片.照片上的文字内容,直接转换为可编辑文本的过程.目前各行各业不断地应用文字识别产品,解决文字录入工作的烦恼,提高工作效率. OCR文字识别用在哪里? 一个做社区工作的朋友透露, ...
- 深入tornado中的协程
tornado使用了单进程(当然也可以多进程) + 协程 + I/O多路复用的机制,解决了C10K中因为过多的线程(进程)的上下文切换 而导致的cpu资源的浪费. tornado中的I/O多路复用前面 ...
- 复杂SQL查询实例-5种普惠产品必须显示...
复杂SQL需求: 1.查询productCode in (1, 2, 4, 5, 7)五种 2.5种产品必须固定显示,优先显示procuct_status='1'在售产品,在售产品卖完则售罄产品顶上来 ...
- ecshop打开手机端QQ对话窗口
ecshop的手机功能比较弱,默认的模板很丑,也不带打开手机端QQ等功能,在程序里添加im等程序变量后,在模板里引入以下代码,即可打开手机端qq对话窗口 <!-- QQ 号码 {foreach ...
- bigdecimal更精确的浮点处理方式
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位内有效数,超过16位,double可能会出现内存 ...
- 架构设计之Spring-Session分布式集群会话管理
前言 通常在web开发中,回话管理是很重要的一部分,用于存储与用户相关的一些数据.对于JAVA开发者来说,项目中的session一般由Tomcat或者jetty容器来管理. 特点介绍 尽管使用特定的容 ...