当前位置: 首页 > 编程日记 > 正文

memcache安装

转载自 http://zhaochen.blog.51cto.com/2029597/390037

一,memcache简单介绍:

memcached是高性能的分布式内存缓存服务器,为了提高性能,memcached中的数据都保存在内存中,重启memcached及重启操作系统都会导致缓存中的数据全部丢失,其缓存的数据达到指定的内存分配值之后,就会使用LRU算法删除不使用的缓存。(LRU算法的基本概念:当分配的内存可用空间不足时,它尽可能地先保留最常用的数据,将最近没有使用的数据移出内存,释放出的空间来存储其它的数据。)

其作用是缓存数据库查询结果,这样就减少了对数据库的访问次数据,从而减轻数据库的压力,这样就提高了用户的访问速度,典型应用如下图所示:

  • 实验环境:3台虚拟机, Web——memcache——mysql

    web服务器安装:Apache+PHP+PHP(memcache扩展)+mysql+mysql-devel

    memcache服务器:libevent libevent-devel  memcache

    mysql服务器: 安装mysql

    一、web安装

    1、#yum  install  -y  mysql    mysql-devel

    #./configure    --preifx=/usr/local/apache2   --enable-so  --enable-rewrite                 //安装Apache服务

    #make  ;  make install

    #LDFLAGS=-L/usr/lib/mysql  ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-config-file-path=/usr/local/php/etc --with-mysql=/var/lib/mysql --with-jpeg-dir --with-png-dir --with-bz2 --with-freetype-dir --with-iconv-dir --enable-thread-safe-client --with-mysql --with-pdo-mysql --with-mysqli=/usr/lib/mysql/mysql_config            //编译安装PHP

    #make  ; make install

    注:编译PHP的时候遇到的错误:

    configure: error: Cannot find libmysqlclient_r under /usr.

    Note that the MySQL client library is not bundled anymore!

    解决办法如下:

    [root@youxia205 php-5.2.14]# cp -r /usr/lib/mysql/* /usr/lib/

2、#vi  /usr/local/apache2/conf/httpd.conf                          //修改httpd.conf支持php

#AddType application/x-gzip .tgz
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps                   //加上下面2行

<IfModule dir_module>
    DirectoryIndex index.php index.html index.htm
</IfModule>                                        //加上index.php,这时候启动Apache能看见PHP测试页

3、安装客户端(需要PHP环境及PHP的memcache扩展):

[root@youxia205 opt]# wget http://www.php.net/get/php-5.2.14.tar.bz2/from/cn.php.net/mirror

[root@youxia205 opt]# tar -zxvf memcache-2.2.5.tgz

[root@youxia205 opt]# cd memcache-2.2.5
[root@youxia205 memcache-2.2.5]# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519
[root@youxia205 memcache-2.2.5]# ./configure --enable-memcache -with-php-config=/usr/local/php/bin/php-config --with-zlib-dir
[root@youxia205 memcache-2.2.5]# make
[root@youxia205 memcache-2.2.5]# make install
Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-zts-20060613/
[root@youxia205 memcache-2.2.5]# vi /usr/local/php/etc/php.ini
extension=memcache.so

4、#vi    /usr/local/apache2/htdocs/memtest.php               //建立memtest.php测试页,测试memcache使用

<?php

$memcachehost = '192.168.37.20';                 //memcache的IP地址

$memcacheport = 11211;

$memcachelife = 60;

$memcache = new Memcache;

$memcache->connect($memcachehost,$memcacheport) or die ("Could not connect");

$query="select * from personal_info limit 10";

$key=md5($query);

if(!$memcache->get($key))

{

$conn=mysql_connect("192.168.37.30","root","123456");        //这里注意IP是memcache服务IP,root是mysql用户名,123456是密码

mysql_select_db(mydb);

$result=mysql_query($query);

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;

echo "<br>";

//print_r($data);

foreach($data as $a)

{

echo "number is <b><font color=#FF0000>$a[pi_id]</font></b>";

echo "<br>";

echo "name is <b><font color=#FF0000>$a[pi_name]</font></b>";

echo "<br>";

echo "tel is <b><font color=#FF0000>$a[pi_tel]</font></b>";

echo "<br>";

echo "qq is <b><font color=#FF0000>$a[pi_qq]</font></b>";

echo "<br>";

echo "email is <b><font color=#FF0000>$a[pi_email]</font></b>";

echo "<br>";

}

?>                                      //OK web服务器就算安装完毕

二、 memcache安装

安装libevent库,它将Linux的epoll、freebsd操作系统的kqueue等事件处理功能封装成统一的接口,memcached使用这个库,可以发挥其高性能。

[root@youxia205 opt]# yum install libevent libevent-devel
1、下载memcache源码包:
[root@youxia205 opt]# wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz
2、解压、编译、安装:
[root@youxia205 opt]# tar -zxvf memcached-1.4.5.tar.gz
[root@youxia205 opt]# cd memcached-1.4.5
[root@youxia205 memcached-1.4.5]# ./configure
[root@youxia205 memcached-1.4.5]# make && make install
3、安装完成之后可以看下memcache的参数:
[root@youxia205 local]# memcached -help
memcached 1.4.5
-p <num>      TCP port number to listen on (default: 11211)
-U <num>      UDP port number to listen on (default: 11211, 0 is off)
-s <file>     UNIX socket path to listen on (disables network support)
-a <mask>     access mask for UNIX socket, in octal (default: 0700)
-l <ip_addr> interface to listen on (default: INADDR_ANY, all addresses)
-d            run as a daemon
-r            maximize core file limit
-u <username> assume identity of <username> (only when run as root)
-m <num>      max memory to use for items in megabytes (default: 64 MB)
-M            return error on memory exhausted (rather than removing items)
-c <num>      max simultaneous connections (default: 1024)
-k            lock down all paged memory. Note that there is a
limit on how much memory you may lock. Trying to
allocate more than that would fail, so be sure you
set the limit correctly for the user you started
the daemon with (not for -u <username> user;
under sh this is done with 'ulimit -S -l NUM_KB').
-v            verbose (print errors/warnings while in event loop)
-vv           very verbose (also print client commands/reponses)
-vvv          extremely verbose (also print internal state transitions)
-h            print this help and exit
-i            print memcached and libevent license
-P <file>     save PID in <file>, only used with -d option
-f <factor>   chunk size growth factor (default: 1.25)
-n <bytes>    minimum space allocated for key+value+flags (default: 48)
-L            Try to use large memory pages (if available). Increasing
the memory page size could reduce the number of TLB misses
and improve the performance. In order to get large pages
from the OS, memcached will allocate the total item-cache
in one large chunk.
-D <char>     Use <char> as the delimiter between key prefixes and IDs.
This is used for per-prefix stats reporting. The default is
":" (colon). If this option is specified, stats collection
is turned on automatically; if not, then it may be turned on
by sending the "stats detail on" command to the server.
-t <num>      number of threads to use (default: 4)
-R            Maximum number of requests per event, limits the number of
requests process for a given connection to prevent
starvation (default: 20)
-C            Disable use of CAS
-b            Set the backlog queue limit (default: 1024)
-B            Binding protocol - one of ascii, binary, or auto (default)
-I            Override the size of each slab page. Adjusts max item size
(default: 1mb, min: 1k, max: 128m)
4、启动memcached服务:
[root@youxia205 local]# memcached -d -m 64 -u root -l 192.168.37.20 -p 11211 -c 64 -P /tmp/memcached.pid
#-u是指运行memcache的用户,-p是设置memcache监听的端口,-m是分配给memcache使用的内存数据量
-d是指作为daemon在后台启动。
5、查看是否启动成功:
[root@youxia205 local]# netstat -tunlp | grep memcache
tcp        0      0 0.0.0.0:11211               0.0.0.0:*                   LISTEN      14494/memcached
udp        0      0 0.0.0.0:11211               0.0.0.0:*                               14494/memcached
三、mysql数据安装这里不多介绍,可以rpm或者编译安装,这里介绍web需要能登录到mysql这样才能够访问数据内容,我当时就因为这个问题折腾半天访问web看不到测试内容,最后经同事提醒我才弄好~哈哈
#允许root用户在任何地方进行远程登录,并具有所有库任何操作权限,具体操作如下:
1、在本机先使用root用户登录mysql:
mysql -u root -p"youpassword"
进行授权操作:
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
重载授权表:
FLUSH PRIVILEGES;
退出,然后测试一下在web上 mysql  -u root  -h IP -p     是否能登录上mysql
2、建立一个数据库表用于测试使用
设置数据库的相关信息:
#建立一个名称为mydb的库:
mysql> create database mydb;
Query OK, 1 row affected (0.00 sec)
#使用库,并创建personal_info表:
mysql> use mydb;
Database changed
mysql> CREATE TABLE `personal_info` (
-> `pi_id` bigint(20) NOT NULL auto_increment,
-> `pi_name` varchar(50) NOT NULL,
-> `pi_tel` varchar(15) default NULL,
-> `pi_qq` varchar(15) default NULL,
-> `pi_email` varchar(50) default NULL,
-> PRIMARY KEY (`pi_id`)
-> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
Query OK, 0 rows affected (0.00 sec)
#插入一条数据
mysql> INSERT INTO `mydb`.`personal_info` (
-> `pi_id` ,
-> `pi_name` ,
-> `pi_tel` ,
-> `pi_qq` ,
-> `pi_email`
-> )
-> VALUES (
-> '1', 'eric', '13611031222', '55555555', 'eric@nginxs.com'
-> );
Query OK, 1 row affected (0.00 sec)
#查看表中的数据:
mysql> select * from personal_info ;
+-------+---------+-------------+----------+-----------------+
| pi_id | pi_name | pi_tel      | pi_qq    | pi_email        |
+-------+---------+-------------+----------+-----------------+
|     1 | eric    | 13611031222 | 55555555 | eric@nginxs.com |
+-------+---------+-------------+----------+-----------------+
1 row in set (0.00 sec)
四、执行测试: http://IP/memtest.php

#执行的时候报错

Fatal error: Class 'Memcache' not found in /usr/local/apache2/htdocs/memtest.php on line 5

1、解决方法如下:

[root@youxia205 htdocs]# find / -name memcache.so

/usr/local/php/lib/php/extensions/no-debug-zts-20060613/memcache.so

/opt/memcache-2.2.5/.libs/memcache.so

/opt/memcache-2.2.5/modules/memcache.so

2、vi /usr/local/php/etc/php.ini

extension_dir = "./"

extension_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20060613"

3、正确就会显示如下内容:

memcache
number is 1
name is eric
tel is 13611031222
qq is 55555555
email is eric@nginxs.com

4、查看数据库中正在执行的语句,没有发现对mydb库执行查询的线程,说明PHP直接从memcache中提取的数据:
mysql> show processlist;
+-----+----------+-----------------+-------+---------+------+-------+------------------+
| Id | User     | Host            | db    | Command | Time | State | Info             |
+-----+----------+-----------------+-------+---------+------+-------+------------------+
| 697 | prog     | localhost:44175      | word | Sleep   |   23 |       | NULL             |
| 698 | prog     | localhost:44176       | word | Sleep   |   23 |       | NULL             |
| 744 | user  | localhost              | mydb | Sleep   | 3443 |       | NULL             |
| 747 | user  | localhost              | NULL | Query   |    0 | NULL | show processlist |
+-----+----------+-----------------+-------+---------+------+-------+------------------+
4 rows in set (0.00 sec)

相关文章:

算法小论——第三章 又把新桃换旧符

2019独角兽企业重金招聘Python工程师标准>>> 笔记 这一章主要是渐进记号和高中数学的回忆。 几个标记&#xff1a; Θ -- 上界和下界&#xff0c;绑定值&#xff0c;相当于f(n) ∈ [c1 * g(n), c2 * g(n)]Ω -- 闭区间下界&#xff0c;最好运行时间&#xff0c;相当…

来体验一把职场人的真实训练,检验你的工程化交付能力!

长沙软件人才实训基地是由政府引导&#xff0c;长沙软件园&#xff08;大型国企&#xff09;、万兴科技&#xff08;A股上市公司&#xff09;和CSDN&#xff08;中国开发者社区&#xff09;三方参与&#xff0c;强强联手&#xff0c;倾力打造的人才培育平台&#xff0c;旨在通过…

从C#到Objective-C,循序渐进学习苹果开发(7)--使用FMDB对Sqlite数据库进行操作

本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程&#xff0c;本系列文章是在起步阶段逐步积累的&#xff0c;希望带给大家更好&#xff0c;更真实的转换历程体验。本篇主要开始介绍基于XCode进行IOS程序的开发&#xff0c;介绍使用FMDB…

nginx做方向代理不显示图片的问题

在nginx的配置文件中加上 location ~ \.(jpg|png|jpeg|bmp|gif|swf|css)$ { access_log off; expires 30d; root /www/htdocs/market; break; }

Linux系统挂载ntfs分区

Linux系统挂载ntfs分区 http://www.2cto.com/os/201404/297079.htmlposted on 2015-02-21 22:20 雪山看雪 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/zker/p/4297223.html

谷歌新深度学习系统可以促进放射科医生的发展

编译 | 禾木木 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 谷歌人工智能研究人员团队在《自然》上发表了一篇新论文&#xff0c;深度学习可以检测出异常胸部 X 光片&#xff0c;其准确度可与专业放射科医生相媲美。 深度学习系统可以帮助放射科医师优先考虑胸部…

【AngularJS】—— 12 独立作用域

独立作用域的作用 为了便于理解&#xff0c;先看一下下面这个例子&#xff1a; <!doctype html> <html ng-app"myApp"><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><script src"…

nginx虚拟目录设置 alias 和 root

nginx貌似没有虚拟目录的说法&#xff0c;因为它本来就是完完全全根据目录来设计并工作的。 如果非要给nginx安上一个虚拟目录的说法&#xff0c;那就只有alias标签比较“像”&#xff0c;干脆来说说alias标签和root标签的区别吧。 最基本的区别&#xff1a;alias指定的目录是…

避免死锁的一些注意事项

1. 避免嵌套锁&#xff0c; 如果每个线程都只占有一个锁&#xff0c; 则可以很大程度上避免死锁。其死锁的情况是&#xff0c; 线程 1 依次获得 A 对象和 B 对象的锁&#xff0c; 然后决定等另一个线程的信号再继续&#xff0c; 从而先释放了 B 对象的的锁。可是线程 2 需要同时…

这是一个好问题:既然机器可以学习,它们能忘掉吗?

编译 | 禾木木 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 很多公司都使用机器学习来分析人们的欲望、厌恶或面孔。研究人员提出了一个不同的问题&#xff1a;我们如何让机器忘记学习&#xff1f; 机器学习正在寻找如何在人工智能软件中诱发选择性失忆的方法。目…

python tar.gz格式压缩、解压

压缩 代码 import tarfile import os def tar(fname):t tarfile.open(fname ".tar.gz", "w:gz")for root, dir, files in os.walk(fname):print root, dir, filesfor file in files:fullpath os.path.join(root, file)t.add(fullpath)t.close()if __nam…

bzoj1251: 序列终结者 (splay)

splay可以用于维护序列&#xff0c;比如noi的维修序列&#xff0c;比如这道 发现当时splay没写总结&#xff0c;也没题解 然后重新写splay竟然耗了一个晚上 结果是因为max【0】没有附最小值&#xff01;&#xff01;血一样的教训 最后祭出inline大法才过&#xff0c;我的splay真…

模型神器组合,yyds!

作者 | 东哥起飞来源 | Python数据科学最近在kaggle上有一个调参神器非常热门&#xff0c;在top方案中频频出现&#xff0c;它就是OPTUNA。知道很多小伙伴苦恼于漫长的调参时间里&#xff0c;这次结合一些自己的经验&#xff0c;给大家带来一个LGBM模型OPTUNA调参的使用教程&am…

理解http响应头中的Date和Age

Date&#xff1a;Date头域表示消息发送的时间&#xff0c;时间的描述格式由rfc822定义。例如&#xff0c;Date: Mon, 04 Jul 2011 05:53:36 GMT。 Age&#xff1a;当代理服务器用自己缓存的实体去响应请求时&#xff0c;用该头部表明该实体从产生到现在经过多长时间了。 比如访…

linux 保留内核中sas驱动的加载导致crash问题

[rootlocalhost ~]# uname -a Linux localhost.localdomain 3.10.0-693.5.2.el7.x86_64 问题描述&#xff0c;在crash的时候&#xff0c;小内核因为分配中断号失败而触发panic&#xff0c;打印如下&#xff1a;&#xff08;备注&#xff1a;本文大内核就是指正常运行的内核&am…

四层和七层负载均衡的区别

负载均衡设备也常被称为"四到七层交换机"&#xff0c;那补充&#xff1a;所谓四层就是基于IP端口的负载均衡&#xff1b;七层就是基于URL等应用层信息的负载均衡&#xff1b;同理&#xff0c;还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡。换句换说&…

关于数据库,你可能最想知道的几件事

【CSDN 编者按】随着技术不断更新&#xff0c;数据库的发展可谓全面开花&#xff0c;也吸引了越来越多人的关注&#xff0c;但大家真的都足够了解数据库吗&#xff1f;作者 | 易璜珵 责编 | 侯淼淼出品 | 《新程序员》互联网飞速发展的时代里&#xff0c;数据库、中间件和…

Visual C++ 2012/2013的内存溢出检測工具

在过去&#xff0c;每次编写C/C程序的时候&#xff0c;VLD差点儿是我的标配。有了它&#xff0c;就能够放心地敲代码&#xff0c;随时发现内存溢出。 VLD最高可支持到Visual Studio 2012。不知道以后会不会支持Visual Studio 2013&#xff0c;但反正眼下是不支持的。 相关的讨论…

.NetCore Docker

转载于:https://blog.51cto.com/linhongquan/2047736

集生态之力跨城市数字化之难题,英特尔交上了一份完美答卷

随着数字孪生、人工智能、大数据、云计算、区块链等新兴技术的发展成熟&#xff0c;社会正加大步伐向数字化时代迈进。城市&#xff0c;作为社会民生与经济发展的重要载体&#xff0c;自然站在了数字化建设历程的第一线。当然&#xff0c;数字化城市建设并不是搭建“空中楼阁”…

设置Squid Cache_mem大小

squid代理服务器一般的Unix,Linux都自带。我使用的是CentOS 5.3,Squid是自已编译的。 Squid 默认 cache_mem 100 16 256 打开/etc/squid/squid.conf 配置 $vi /etc/squid/squid.conf #http_port ,是代理的端口&#xff0c;如果没有其他的http服务占用80端口或8080&#xf…

centos iptables关于ping

配置iptables策略后&#xff0c;一般来说INPUT都是DROP然后配置需要通过的 当执行&#xff1a; iptables -P INPUT DROP 后&#xff0c;机器就不能被ping通了&#xff01; 因为icmp没有添加到规则中&#xff01; 于是我执行如下代码&#xff1a; iptables -A INPUT -p icmp -j …

禁止蒙层底部页面跟随滚动

场景概述 弹窗是一种常见的交互方式&#xff0c;而蒙层是弹窗必不可少的元素&#xff0c;用于隔断页面与弹窗区块&#xff0c;暂时阻断页面的交互。但是&#xff0c;在蒙层元素中滑动的时候&#xff0c;滑到内容的尽头时&#xff0c;再继续滑动&#xff0c;蒙层底部的页面会开始…

squid日志文件太大,怎样处理?

Squid 默认的&#xff15;天会压缩一次, 在 /etc/logrotate.d/squid中有设置。如果你修改了日志的位置, 请修改 /etc/logrotate.d/squid /home/log/squid/access.log { weekly rotate 5 copytruncate compress notifempty missingok } /home…

安卓系列七(广播机制)

2019独角兽企业重金招聘Python工程师标准>>> 一、什么是广播接收者 广播接收者&#xff08;BroadcastReceiver&#xff09;用于接收广播Intent&#xff0c;广播Intent的发送是通过调用Context.sendBroadcast()、Context.sendOrderedBroadcast()来实现的。通常一个广…

第九代小冰惊喜登场,多端融合且琴棋书画样样精通

谈及智能助手&#xff0c;相信大家都不会漏过小冰这款具有划时代意义的产品。从最初的微软小冰到现在的第九代小冰&#xff0c;AI的技术在不断的演进&#xff0c;而小冰也从最初的贴心助手变成了如今琴棋书画样样精通的人工智能前沿技术载体。 北京时间2021年9月22日&#xff…

C++对象赋值的四种方式

1. 引用作为参数的方式传递. 1 GetObject(Object& obj) 2 { 3 obj.value value1; 4 } 特点: 在外部构造一个对象. 把该对象以引用的方式传递到函数中. 从而实现对该对象的改变, 该参数实质是一个[out]类型的参数, 而非[in]类型的参数. 这里的引用可以称为别名. 点评: …

金九银十,不要跳槽!

前言:又到了求职的金九银十的黄金月份&#xff0c;我相信有不少小伙伴已经摩拳擦掌的准备寻找下一份工作。就目前国内的面试模式来讲&#xff0c;在面试前积极的准备面试&#xff0c;复习整个 Java 知识体系将变得非常重要&#xff0c;可以很负责任地说一句&#xff0c;复习准备…

FreeMarker标签介绍

FreeMarker标签使用 一、FreeMarker模板文件主要有4个部分组成 1、文本&#xff0c;直接输出的部分 2、注释&#xff0c;即<#--...-->格式不会输出 3、插值&#xff08;Interpolation&#xff09;&#xff1a;即${..}或者#{..}格式的部分,将使用数据模型中的部分替代输…

让Squid 显示本地时间

Squid的Error messages 默认的时间显示的GMT时间&#xff0c;而非本地时间&#xff0c;这个有时候看着很别扭。 下面是修改方法&#xff0c;找到Squid的源文件src/errorpage.c 大概在60多行&#xff0c; { ERR_SQUID_SIGNATURE, "\n<BR clear\"all\">\n&…