一、memcached 简介
memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展
性。它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable。
二、memcached 安装(参考” Linux下的Memcache安装”)
首先是下载 memcached 了,目前最新版本是 1.4.0,直接从官方网站即可下载到 memcached-1[1].4.0.tar.gz。除此之外,memcached 用到了 libevent,我yum install libevent libevent-devel
接下来是将 memcached-1[1].4.0.tar.gz 解开包、编译、安装:
tar -xzf memcached-1.1.12.tar.gz
cd memcached-1.1.12
./configure
make
make install
三、运行 memcached 守护程序
运行 memcached 守护程序很简单,只需一个命令行即可,不需要修改任何配置文件(也没有配置文件给你修改):
/usr/local/bin/memcached -d -m 128 -l 192.168.x.y -p 11211 -u www
参数解释:
-d 以守护程序(daemon)方式运行 memcached;
-m 设置 memcached 可以使用的内存大小,单位为 M;
-l 设置监听的 IP 地址,如果是本机的话,通常可以不设置此参数;(一般是不写)
-p 设置监听的端口,默认为 11211,所以也可以不设置此参数;
-u 指定用户,如果当前为 root 的话,需要使用此参数指定用户。
当然,还有其它参数可以用,man memcached
一下就可以看到了。
四、memcached 的工作原理
首先memcached 是以守护程序方式运行于一个或多个服务器中,随时接受客户端的连接操作,客户端可以由各种语言编写,目前已知的客户端 API 包括 Perl/PHP/Python/Ruby/Java/C#/C 等等。PHP 等客户端在与 memcached 服务建立连接之后,接下来的事情就是存取对象了,每个被存取的对象都有一个唯一的标识符 key,存取操作均通过这个 key 进行,保存到 memcached 中的对象实际上是放置内存中的,并不是保存在 cache 文件中的,这也是为什么 memcached 能够如此高效快速的原因。注意,这些对象并不是持久的,服务停止之后,里边的数据就会丢失。
五、PHP 如何作为 memcached 客户端
有两种方法可以使 PHP 作为 memcached 客户端,调用 memcached 的服务进行对象存取操作。
第一种,PHP 有一个叫做 memcache 的扩展,Linux 下需编译安装memcache,Window 下则在 php.ini 中去掉 php_memcache.dll 前边的注释符,使其可用。
参考张宴文章中安装nginx的一部分
编译安装PHP5扩展模块
tar zxvf memcache-2.2.5.tgz <----下载 (这是一个php扩展包资源库) cd memcache-2.2.5/ /usr/local/webserver/php/bin/phpize ./configure --with-php-config=/usr/local/webserver/php/bin/php-config make make install cd ../
这样,php.ini文件中添加了extension = "memcache.so"
例子(PHP的Memcache):
(1)
$mem = new Memcache;
$mem->connect("192.168.x.y", 11211)or die ("Could not connect");
$mem->set('key', 'This is a test!', 0, 60);
$val = $mem->get('key');
echo $val;
?>
(2)
< ?php //连接 $mem = new Memcache; $mem->connect("192.168.0.200", 12000); //保存数据 $mem->set('key1', 'This is first value', 0, 60); $val = $mem->get('key1'); echo "Get key1 value: " . $val ." "; //替换数据 $mem->replace('key1', 'This is replace value', 0, 60); $val = $mem->get('key1'); echo "Get key1 value: " . $val . " "; //保存数组 $arr = array('aaa', 'bbb', 'ccc', 'ddd'); $mem->set('key2', $arr, 0, 60); $val2 = $mem->get('key2'); echo "Get key2 value: "; print_r($val2); echo " "; //删除数据 $mem->delete('key1'); $val = $mem->get('key1'); echo "Get key1 value: " . $val . " "; //清除所有数据 $mem->flush(); $val2 = $mem->get('key2'); echo "Get key2 value: "; print_r($val2); echo " "; //关闭连接 $mem->close(); ?>
如果正常的话,浏览器将输出: Get key1 value: This is first value Get key1 value: This is replace value Get key2 value: Array ( [0] => aaa [1] => bbb [2] => ccc [3] => ddd ) Get key1 value: Get key2 value:
程序代码分析
初始化一个Memcache的对象: $mem = new Memcache;
连接到我们的Memcache服务器端,第一个参数是服务器的IP地址,也可以是主机名,第二个参数是Memcache的开放的端口: $mem->connect("192.168.0.200",12000);
保存一个数据到Memcache服务器上,第一个参数是数据的key,用来定位一个数据,第二个参数是需要保存的数据内容,这里是一个字符串,第三 个参数是一个标记,一般设置为0或者MEMCACHE_COMPRESSED就行了,第四个参数是数据的有效期,就是说数据在这个时间内是有效的,如果过 去这个时间,那么会被Memcache服务器端清除掉这个数据,单位是秒,如果设置为0,则是永远有效,我们这里设置了60,就是一分钟有效时间: $mem->set(‘key1‘,‘This is first value’, 0, 60);
从Memcache服务器端获取一条数据,它只有一个参数,就是需要获取数据的key,我们这里是上一步设置的key1,现在获取这个数据后输出输出: $val = $mem->get(’key1′); echo "Get key1 value: " . $val;
现在是使用replace方法来替换掉上面key1的值,replace方法的参数跟set是一样的,不过第一个参数key1是必须是要替换数据内容的key,最后输出了: $mem->replace(‘key1′,‘This is replace value’, 0, 60); $val = $mem->get(‘key1′); echo "Get key1 value: " . $val;
同样的,Memcache也是可以保存数组的,下面是在Memcache上面保存了一个数组,然后获取回来并输出 $arr = array(‘aaa’,‘bbb’, ‘ccc’,‘ddd’); $mem->set(‘key2′,$arr, 0, 60); $val2 = $mem->get(‘key2′); print_r($val2);
现在删除一个数据,使用delte接口,参数就是一个key,然后就能够把Memcache服务器这个key的数据删除,最后输出的时候没有结果 $mem->delete(‘key1′); $val = $mem->get(‘key1′); echo "Get key1 value: " . $val . " ";
最后我们把所有的保存在Memcache服务器上的数据都清除,会发现数据都没有了,最后输出key2的数据为空,最后关闭连接
(3)数据
uid
username
password
gender
751490
a62986233
8d03f56ad2c48d494cd4b73b3ba64dca
0
751489
hldhoxbh
25d55ad283aa400af464c76d713c07ad
0
751488
wuhan0088
ba2206cbae7c1bfe33a54ff161943bab
0
751487
anrron
b206e95a4384298962649e58dc7b39d4
0
751486
hldjxlkx
9c98df872d24244696c393a1d26ab749
0
751485
1394afjh
25d55ad283aa400af464c76d713c07ad
0
751484
yesi808
32baeaa3c422413843b015919c0be999
0
751483
IDC010pw
25f9e794323b453885f5181f1b624d0b
0
751482
ebay360v
a36b9e764318d31b4810d7d18096e6e7
0
751481
ppgqsvgv
9c98df872d24244696c393a1d26ab749
0
10 rows in set (0.00 sec)
#数据库连接信息
$host="192.168.0.71";
$user="askwan";
$passwd="passwd";
$db="pwbbs";
$query="select UID,username,password,gender from pw_members order by uid desc limit 10;"
#我这里选用了MD5方式加密SQL做为key ,也可用其他加密方式,如Base64等
$m_key=md5($query);
$mem=new Memcache();
$mem->connect("192.168.0.72",11211);
if(!$result=$mem->get($m_key)){
echo "这是从数据库读出来的结果!";
$connection=mysql_connect($host,$user,$passwd) or die ("Unable to conect!" );
mysql_select_db($db);
$result=mysql_query($query) or die("Error query!".mysql_error());
while($row=mysql_fetch_row($result)){
$memdata[]=$row;
}
$mem->add($m_key,$memdata);
mysql_free_result($result);
mysql_close($connection);
}
else{
echo "这是从Memcached Server读出来的结果!n";
}
$result=$mem->get($m_key);
#显示获取的数据
echo "
";
echo "
";
echo "
Uid ";
echo "
Username ";
echo "
PassWord ";
echo "
Gender ";
echo "
";
for($i=0;$i<10;$i++){
echo "
";
for($j=0;$j<4;$j++){
echo "
".$result[$i][$j]." ";
}
echo "
";
}
?>
第二种,可以避开扩展、重新编译所带来的麻烦,那就是直接使用 php-memcached-client.php,但效率会比扩展库稍差一些。
首先 下载 memcached-client.php, 在下载了 memcached-client.php 之后,就可以通过这个文件中的类“memcached”对 memcached 服务进行操作了。其实代码调用非常简单,主要会用到的方法有 add()、get()、replace() 和 delete(),方法说明如下:
add ($key, $val, $exp = 0)
往 memcached 中写入对象,$key 是对象的唯一标识符,$val 是写入的对象数据,$exp 为过期时间,单位为秒,默认为不限时间;
get ($key)
从 memcached 中获取对象数据,通过对象的唯一标识符 $key 获取;
replace ($key, $value, $exp=0)
使用 $value 替换 memcached 中标识符为 $key 的对象内容,参数与 add() 方法一样,只有 $key 对象存在的情况下才会起作用;
delete ($key, $time = 0)
删除 memcached 中标识符为 $key 的对象,$time 为可选参数,表示删除之前需要等待多长时间。
下面是一段简单的测试代码,代码中对标识符为 'mykey' 的对象数据进行存取操作:
// 包含 memcached 类文件
require_once('memcached-client.php');
// 选项设置
$options = array(
'servers' => array('192.168.10.215:11211'), //memcached 服务的地址、端口,可用多个数组元素表示多个 memcached 服务
'debug' => false, //是否打开 debug
'compress_threshold' => 10240, //超过多少字节的数据时进行压缩
'persistant' => false //是否使用持久连接
);
// 创建 memcached 对象实例
$mc = new memcached($options);
// 设置此脚本使用的唯一标识符
$key = 'mykey';
// 往 memcached 中写入对象
$mc->add($key, 'some random strings');
$val = $mc->get($key);
echo " ".str_pad('$mc->add() ', 60, '_')." ";
var_dump($val);
// 替换已写入的对象数据值
$mc->replace($key, array('some'=>'haha', 'array'=>'xxx'));
$val = $mc->get($key);
echo " ".str_pad('$mc->replace() ', 60, '_')." ";
var_dump($val);
// 删除 memcached 中的对象
$mc->delete($key);
$val = $mc->get($key);
echo " ".str_pad('$mc->delete() ', 60, '_')." ";
var_dump($val);
?>
是不是很简单,在实际应用中,通常会把数据库查询的结果集保存到 memcached 中,下次访问时直接从 memcached 中获取,而不再做数据库查询操作,这样可以在很大程度上减轻数据库的负担。通常会将 SQL 语句 md5() 之后的值作为唯一标识符 key。下边是一个利用 memcached 来缓存数据库查询结果集的示例(此代码片段紧接上边的示例代码):
$sql = 'SELECT * FROM users';
$key = md5($sql); //memcached 对象标识符
if ( !($datas = $mc->get($key)) ) {
// 在 memcached 中未获取到缓存数据,则使用数据库查询获取记录集。
echo " ".str_pad('Read datas from MySQL.', 60, '_')." ";
$conn = mysql_connect('localhost', 'test', 'test');
mysql_select_db('test');
$result = mysql_query($sql);
while ($row = mysql_fetch_object($result))
$datas[] = $row;
// 将数据库中获取到的结果集数据保存到 memcached 中,以供下次访问时使用。
$mc->add($key, $datas);
} else {
echo " ".str_pad('Read datas from memcached.', 60, ' ')."n";
}
var_dump($datas);
?>
可以看出,使用 memcached 之后,可以减少数据库连接、查询操作,数据库负载下来了,脚本的运行速度也提高了。
Memcache 的使用 使用Memcache的网站一般流量都是比较大的,为了缓解数据库的压力,让Memcache作为一个缓存区域,把部分信息保存在内存中,在前端能够迅速 的进行存取。那么一般的焦点就是集中在如何分担数据库压力和进行分布式,毕竟单台Memcache的内存容量的有限的。我这里简单提出我的个人看法,未经 实践,权当参考。
分布式应用 Memcache本来支持分布式,我们客户端稍加改造,更好的支持。我们的key可以适当进行有规律的封装,比如以user为主的网站来说,每个用户都有 User ID,那么可以按照固定的ID来进行提取和存取,比如1开头的用户保存在第一台Memcache服务器上,以2开头的用户的数据保存在第二胎 Mecache服务器上,存取数据都先按照User ID来进行相应的转换和存取。
但是这个有缺点,就是需要对User ID进行判断,如果业务不一致,或者其他类型的应用,可能不是那么合适,那么可以根据自己的实际业务来进行考虑,或者去想更合适的方法。
减少数据库压力 这个算是比较重要的,所有的数据基本上都是保存在数据库当中的,每次频繁的存取数据库,导致数据库性能极具下降,无法同时服务更多的用户,比如 MySQL,特别频繁的锁表,那么让Memcache来分担站长博客 数据库的压力吧。我们需要一种改动比较小,并且能够不会大规模改变前端的方式来进行改变目前的 架构。
我考虑的一种简单方法: 后端的数据库操作模块,把所有的Select操作提取出来(update/delete/insert不管),然后把对应的SQL进行相应的hash算法 计算得出一个hash数据key(比如MD5或者SHA),然后把这个key去Memcache中查找数据,如果这个数据不存在,说明还没写入到缓存中, 那么从数据库把数据提取出来,一个是数组类格式,然后把数据在set到Memcache中,key就是这个SQL的hash值,然后相应的设置一个失效时 间,比如一个小时,那么一个小时中的数据都是从缓存中提取的,有效减少数据库的压力。缺点是数据不实时,当数据做了修改以后,无法实时到前端显示,并且还 有可能对内存占用比较大,毕竟每次select出来的数据数量可能比较巨大,这个是需要考虑的因素。
Memcache 的安全 我们上面的Memcache服务器端都是直接通过客户端连接后直接操作,没有任何的验证过程,这样如果服务器是直接暴露在互联网上的话是比较危险,轻则数 据泄露被其他无关人员查看,重则服务器被入侵,因为Mecache是以root权限运行的,况且里面可能存在一些我们未知的bug或者是缓冲区溢出的情 况,这些都是我们未知的,所以危险性是可以预见的。为了安全起见,我做两点建议,能够稍微的防止黑客的入侵或者数据的泄露。
内网访问 最好把两台服务器之间的访问是内网形态的,一般是Web服务器跟Memcache服务器之间。普遍的服务器都是有两块网卡,一块指向互联网,一块指向内 网,那么就让Web服务器通过内网的网卡来访问Memcache服务器,我们Memcache的服务器上启动的时候就监听内网的IP地址和端口,内网间的 访问能够有效阻止其他非法的访问。 memcached -d -m 1024 -u root -l 192.168.0.200 -p 11211 -c 1024 -P /tmp/memcached.pid Memcache服务器端设置监听通过内网的192.168.0.200的ip的11211端口,占用1024MB内存,并且允许最大1024个并发连接
设置防火墙 防火墙是简单有效的方式,如果却是两台服务器都是挂在网的,并且需要通过外网IP来访问Memcache的话,那么可以考虑使用防火墙或者代理程序来过滤非法访问。 一般我们在Linux下可以使用iptables或者FreeBSD下的ipfw来指定一些规则防止一些非法的访问,比如我们可以设置只允许我们的Web服务器来访问我们Memcache服务器,同时阻止其他的访问。 iptables -F iptables -P INPUT DROP iptables -A INPUT -p tcp -s 192.168.0.2 –dport 11211 -j ACCEPT iptables -A INPUT -p udp -s 192.168.0.2 –dport 11211 -j ACCEPT 上面的iptables规则就是只允许192.168.0.2这台Web服务器对Memcache服务器的访问,能够有效的阻止一些非法访问,相应的也可以增加一些其他的规则来加强安全性,这个可以根据自己的需要来做。
参考(1)
Linux下的Memcache安装
最近在研究怎么让Discuz!去应用Memcache去做一些事情,记录下Memcache安装的过程。
Linux 下Memcache服务器端的安装 服务器端主要是安装memcache服务器端,目前的最新版本是 memcached-1.3.0 。 1.2.2.tar.gz 另外,Memcache用到了libevent这个库用于Socket的处理,所以还需要安装libevent,libevent的最新版本是libevent-1.3。(如果你的系统已经安装了libevent,可以不用安装) 用wget指令直接下载这两个东西.下载回源文件后。 1.先安装libevent。这个东西在配置时需要指定一个安装路径,即./configure –prefix=/usr;然后make;然后make install; 2.再安装memcached,只是需要在配置时需要指定libevent的安装路径即./configure –with-libevent=/usr;然后make;然后make install; 这样就完成了Linux下Memcache服务器端的安装。详细的方法如下:
1.分别把memcached和libevent下载回来,放到 /tmp 目录下: cd /tmp 1.2.0.tar.gz
2.先安装libevent: tar zxvf libevent-1.2.tar.gz cd libevent-1.2 ./configure –prefix=/usr make make install
3.测试libevent是否安装成功: ls -al /usr/lib | grep libevent lrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent-1.2.so.1 -> libevent-1.2.so.1.0.3 -rwxr-xr-x 1 root root 263546 11?? 12 17:38 libevent-1.2.so.1.0.3 -rw-r–r– 1 root root 454156 11?? 12 17:38 libevent.a -rwxr-xr-x 1 root root 811 11?? 12 17:38 libevent.la lrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent.so -> libevent-1.2.so.1.0.3 还不错,都安装上了。
4.安装memcached,同时需要安装中指定libevent的安装位置: cd /tmp tar zxvf memcached-1.2.0.tar.gz cd memcached-1.2.0 ./configure –with-libevent=/usr make make install 如果中间出现报错,请仔细检查错误信息,按照错误信息来配置或者增加相应的库或者路径。 安装完成后会把memcached放到 /usr/local/bin/memcached ,
5.测试是否成功安装memcached: ls -al /usr/local/bin/mem* -rwxr-xr-x 1 root root 137986 11?? 12 17:39 /usr/local/bin/memcached -rwxr-xr-x 1 root root 140179 11?? 12 17:39 /usr/local/bin/memcached-debug
安装Memcache的PHP扩展 1.选择相应想要下载的memcache版本。 2.安装PHP的memcache扩展
tar vxzf memcache-2.2.1.tgz cd memcache-2.2.1 /usr/local/php/bin/phpize ./configure –enable-memcache –with-php-config=/usr/local/php/bin/php-config –with-zlib-dir make make install
3.上述安装完后会有类似这样的提示:
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-2007xxxx/
4.把php.ini中的extension_dir = “./”修改为
extension_dir = “/usr/local/php/lib/php/extensions/no-debug-non-zts-2007xxxx/”
5.添加一行来载入memcache扩展:extension=memcache.so
memcached 的基本设置 : 1.启动Memcache的服务器端: /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid
-d选项是启动一个守护进程, -m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB, -u是运行Memcache的用户,我这里是root, -l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.0.200, -p是设置Memcache监听的端口,我这里设置了12000,最好是1024以上的端口, -c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定, -P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid,
2.如果要结束Memcache进程,执行:
kill cat /tmp/memcached.pid
也可以启动多个守护进程,不过端口不能重复。
3.重启apache,service httpd restart
Memcache 环境测试 : 运行下面的php文件,如果有输出This is a test!,就表示环境搭建成功。开始领略Memcache的魅力把! < ?php $mem = new Memcache; $mem->connect(”127.0.0.1″, 11211); $mem->set(’key’, ‘This is a test!’, 0, 60); $val = $mem->get(’key’); echo $val; ?>
你可能感兴趣的:(phpmemcached)
如何在PHP中使用Memcached和Redis?
xiangpingeasy
PHP php memcached redis
在PHP中使用Memcached和Redis主要涉及两个方面:安装相关扩展和编写代码进行交互。以下是在PHP中使用Memcached和Redis的基本步骤:使用Memcached:1.安装Memcached扩展:确保你的系统上安装了Memcached服务器,并安装PHPMemcached扩展。#安装Memcached扩展sudoapt-getinstallphp-memcached2.编写PHP代
如何在Linux下安装php-memcached扩展
yanjiangbo
Linux相关软件
在Linux下的phpmemcached扩展叫做memcached.so,安装memcached.so有两种方式,一种是使用源码编译安装、一种是使用PECL安装。安装完此扩展后,PHP才能和memcache或者memcached通讯。(memcache和memcached为缓存服务器。memcache是原生的,memcached需要依赖)由于memcached.so扩展需要依赖libmemcach
NGINX 安装 Memcached 和 PHP Memcached--wordpress网站加速
weixin_44317141
数据库 linux ubuntu
今天我们折腾一下Memcached和PHPMemcached扩展1、什么是Memcached?Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。简单来说,就是安装Memcached之后,你可以将一些数据缓存到内存中,加快网站速度!对wordpress而言,做了服务器的M
安装数据库缓存以及php扩展插件
sincerels
nginx
php安装扩展插件phpMemcached插件数据库缓存插件,减轻数据库访问压力1.在php服务器上下载memcache客户端扩展插件:#wget-qhttp://pecl.php.net/get/memcache-2.2.7.tgz#tar-xfmemcache-2.2.7.tgz#cdmemecache-2.2.7.tgz#phpize生成./configure文件#./configure--
PHP使用Memcached扩展的一个坑
从心所愿
linux memcache
最近项目中用到PHP连接Memcach的场景。这个场景对于PHP开发者很常见。但就是这么常见的一个场景,带来了意想不到的一个问题。我这边的phpmemcached扩展版本是memcachedsupportenabledVersion2.1.0libmemcachedversion1.0.8SessionsupportyesigbinarysupportnojsonsupportnoDirectiv
macos安装memcached及PHP扩展
ESCYezi
首先安装memcachedbrewinstallmemcached由于PHP对memcached的支持是由基于libmemached的PHPmemcached扩展实现的,首先到https://libmemcached.org/libMemcached.html下载llibmemcached包。解压后进入文件夹进行编译./configuremake接下来问题来了,编译过程中会出现两个errorlib
CentOS下安装Memcached和PHP Memcached扩展
CODETC
关于高性能的分布式内存对象缓存系统Memcached,我们在另一篇文章中有提到过“在windows系统下如何安装memcached的讲解”,这次一起来看看在Centos系统中如何安装Memcached和PHPMemcached扩展I.安装Memcached1.安装依赖包libeventMemcached依赖libevent库,所以安装前可能需要执行yuminstalllibevent-devel2
ThinkPHP框架中使用Memcached缓存数据的方法
SohoWang
本文实例讲述了ThinkPHP框架中使用Memcached缓存数据的方法。分享给大家供大家参考,具体如下:ThinkPHP默认使用文件缓存数据,支持Memcache等其他缓存方式,有两个PHP扩展:Memcache和Memcached,Memcahe官方有说明,主要说一下Memcached。相对于PHPMemcache,phpMemcached是基于原生的c的libmemcached的扩展,更加完
memcache、memcached 区别
yyt8yyt8
Memcached,指的是Memcached服务器,就是独立运行Memcached的后台服务器,用于存储数据的“数据库”。PHP有两个memcache客户端:phpmemcache和phpmemcached。phpmemcache独立用php实现,是老客户端,从我们实践中已发现有多个问题,而且功能少,属性也可设置的少;phpmemcached是基于原生的c的libmemcached的扩展,更加完善
memcached的应用
珞辰
memcached的应用 memcached
在配置所有的memcached应用之前必须先准备LNMP环境(这里不再赘述LNMP的搭建)第一种应用场景:php的memcache扩展介绍:php有两个memcache的扩展:phpmemcache和phpmemcached。phpmemcache独立用php实现,是老版客户端,从我们实践中已发现有多个问题,而且功能少,属性也可设置的少;phpmemcached是基于原生的c的libmemcach
memcached的应用
珞辰
memcached的应用
在配置所有的memcached应用之前必须先准备LNMP环境(这里不再赘述LNMP的搭建)第一种应用场景:php的memcache扩展介绍: php有两个memcache的扩展:phpmemcache和phpmemcached。 phpmemcache独立用php实现,是老版客户端,从我们实践中已发现有多个问题,而且功能少,属性也可设置的少;phpmemcached是基于原生的c的lib
高效缓存服务器Memcached(二)
飞残月
memcached memcache 缓存服务器
一、Memcache应用一php与memcache1、PHP的memcache的客户端 PHP有两个memcache客户端:phpmemcache和phpmemcached。phpmemcache独立用php实现,是老客户端,从我们实践中已发现有多个问题,而且功能少,属性也可设置的少;phpmemcached是基于原生的c的libmemcached的扩展,更加完善,建议替换为phpmemcach
高效缓存服务器Memcached(二)
飞残月
memcached memcache 缓 web服务
一、Memcache应用一php与memcache1、PHP的memcache的客户端PHP有两个memcache客户端:phpmemcache和phpmemcached。phpmemcache独立用php实现,是老客户端,从我们实践中已发现有多个问题,而且功能少,属性也可设置的少;phpmemcached是基于原生的c的libmemcached的扩展,更加完善,建议替换为phpmemcached
高效缓存服务器Memcached(二)
飞残月
memcached memcache 缓存服务器
一、Memcache应用一php与memcache1、PHP的memcache的客户端 PHP有两个memcache客户端:phpmemcache和phpmemcached。phpmemcache独立用php实现,是老客户端,从我们实践中已发现有多个问题,而且功能少,属性也可设置的少;phpmemcached是基于原生的c的libmemcached的扩展,更加完善,建议替换为phpmemcach
学习linux的笔记(二)
zcz123
一、memcached的安装1.准备文件:下载libevent与memcached的安装文件libevent下载地址:http://rpmfind.net/linux/rpm2html/search.phpmemcached下载地址:http://memcached.org/files/memcached-1.4.24.tar.gz2.安装libevent:tarzxvflibevent-2.0.
编译安装libmemcached库报错
董松
PHP memcache libmemcached
报错:error:tr1/cinttypes:Nosuchfileordirectory场景:PHP的memcache扩展性能不如PHPmemcached扩展,功能也少于PHPmemcached扩展,安装PHPmemcached扩展需要首先安装libmemcached库,Redhat5系列的系统包括CentOS5编译安装新版libmemcached库经常会碰到如上错误原因:libmemcached
编译安装libmemcached库报错
dongsong1117
PHP memcache libmemcached
报错:error:tr1/cinttypes:Nosuchfileordirectory场景:PHP的memcache扩展性能不如PHPmemcached扩展,功能也少于PHPmemcached扩展,安装PHPmemcached扩展需要首先安装libmemcached库,Redhat5系列的系统包括CentOS5编译安装新版libmemcached库经常会碰到如上错误原因:libmemcached
关于Windows7 下面安装memcached和php的memcache扩展
宛十八
Php代码与memcached的交互和与mysql的交互原理是一样的,需要安装一个服务器端的memcached,现有的交互处理过程已经封装成了一个php的扩展了;需要在php.ini中,将这个扩展加进去。Phpmemcached官方手册地址:http://cn2.php.net/manual/en/memcached.get.php说说我的安装过程:1.我的环境:php-5.2.6.memcach
关于Windows7 下面安装memcached和php的memcache扩展
kdchxue
memcached memache扩展
Php代码与memcached的交互和与mysql的交互原理是一样的,需要安装一个服务器端的memcached,现有的交互处理过程已经封装成了一个php的扩展了;需要在php.ini中,将这个扩展加进去。Phpmemcached官方手册地址:http://cn2.php.net/manual/en/memcached.get.php说说我的安装过程:1.我的环境:php-5.2.6.memcach
Centos6.5 Memcached 安装 以及php memcached 扩展安装
cnu2m
Centos6.5Memcached安装以及phpmemcached扩展安装直接使用yum安装yuminstallMemcached(服务器端)yuminstalllibmemcachedyuminstallphp-pecl-memcached(PHP扩展,依赖libmemcached)yuminstallphp-pecl-memcache$mem=newMemcache();
if(!$mem-
为php安装memcached扩展笔记
风一样的世界
1、下载libmemcached库地址在https://code.launchpad.net/libmemcachedwget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz2、下载phpmemcached扩展,地址在http://pecl.php.net/package/memc
mac部署memadmin
rkikbs
title:“[mac配置php环境]”date:2013-07-2617:46mac部署memadmin注意:操作系统:10.8.4apache系统已经安装php环境系统已经安装TODO:配置apache,使其可以部署php项目编译并配置phpmemcached扩展运行MemAdmin关于MemAdmin,详见,其项目源码请看配置apache,启用php模块1.编辑/etc/apache2/ht
PHP memcached 介绍 - 理解用
wgluser
PHPmemcached介绍为什么会有Memcache和memcached两种名称?其实Memcache是这个项目的名称,而memcached是它服务器端的主程序文件名.http://121099600.blog.sohu.com/135195542.html一、memcached简介在很多场合,我们都会听到memcached这个名字,但很多同学只是听过,并没有用过或实际了解过,只知道它是一个很不
memachache 与 memcached 的区别和联系
wenzhibinbin_pt
对于内存缓存,比较常用的有两种memcache和memcached扩展。 而memcached和memcache的守护进程memcached同名,比较容易引起混淆。首先我们可以从php官方手册上可以清晰的看到两者的区别:memcache:http://cn2.php.net/manual/en/book.memcache.phpmemcached:http://cn2.php.net/manua
学习网址大全
tianmo2010
算法 浏览器 服务器 cgi buffer
一,PHP篇:二,MysQL篇:MySQL官方网站三,Memcached篇:① phpmemcached:http://www.php.net/manual/en/book.memcached.php②淘宝NoSQL:http://www.nosqlnotes.net/?from=yufeng四,Redis篇:使用实例:http://redis.io/commands/五,C/C++篇:①kyli
php模块memcache和memcached区别分析
1.目前大多数php环境里使用的都是不带d的memcache版本,这个版本出的比较早,是一个原生版本,完全在php框架内开发的。与之对应的带d的memcached是建立在libmemcached的基础上,所以相对来说,memcached版本的功能更全一些。memcache:http://cn2.php.net/manual/en/book.memcache.phpmemcached:http://
使用memcached显著提升站点性能
chhbjh
oracle 职场 应用程序 休闲 blank
原文出处:http://www.nowamagic.net/architecture/architecture_UseMemcached.phpMemcached常被用来加速应用程序的处理,在这里,我们将着重于介绍将它部署于应用程序和环境中的最佳实践。这包括应该存储或不应存储哪些、如何处理数据的灵活分布以及如何调节用来更新memcached和所存储数据的方法。我们还将介绍对高可用性的解决方案的支持
【监控】netstat+telnet+m-top+phpmemcached
zhengdl126
python memcached Blog perl nagios
1G=1024*1024*1024=1073741824 bytes
一、缓存命中率 = get_hits/cmd_get * 100% 二、get_misses的数字加上get_hits应该等于cmd_get 三、total_items == cmd_set == get_misses,当可用最大内存用光时, memcached就会删掉一些内容,等式就会不成立
PHP memcached 应用示例
andylin02
sql mysql 数据库 PHP memcached delete
PHPmemcached应用示例 首先下载memcached-client.php,在下载了memcached-client.php之后,就可以通过这个文件中的类“memcached”对memcached服务进行操作了。其实代码调用非常简单,主要会用到的方法有add()、get()、replace()和delete(),方法说明如下:add($key,$val,$exp=0)往memcached中
Spring4.1新特性——综述
jinnianshilongnian
spring 4.1
目录
Spring4.1新特性——综述
Spring4.1新特性——Spring核心部分及其他
Spring4.1新特性——Spring缓存框架增强
Spring4.1新特性——异步调用和事件机制的异常处理
Spring4.1新特性——数据库集成测试脚本初始化
Spring4.1新特性——Spring MVC增强
Spring4.1新特性——页面自动化测试框架Spring MVC T
Schema与数据类型优化
annan211
数据结构 mysql
目前商城的数据库设计真是一塌糊涂,表堆叠让人不忍直视,无脑的架构师,说了也不听。
在数据库设计之初,就应该仔细揣摩可能会有哪些查询,有没有更复杂的查询,而不是仅仅突出
很表面的业务需求,这样做会让你的数据库性能成倍提高,当然,丑陋的架构师是不会这样去考虑问题的。
选择优化的数据类型
1 更小的通常更好
更小的数据类型通常更快,因为他们占用更少的磁盘、内存和cpu缓存,
第一节 HTML概要学习
chenke
html Web css
第一节 HTML概要学习
1. 什么是HTML
HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,它规定了自己的语法规则,用来表示比“文本”更丰富的意义,比如图片,表格,链接等。浏览器(IE,FireFox等)软件知道HTML语言的语法,可以用来查看HTML文档。目前互联网上的绝大部分网页都是使用HTML编写的。
打开记事本 输入一下内
MyEclipse里部分习惯的更改
Array_06
eclipse
继续补充中----------------------
1.更改自己合适快捷键windows-->prefences-->java-->editor-->Content Assist-->
Activation triggers for java的右侧“.”就可以改变常用的快捷键
选中 Text
近一个月的面试总结
cugfy
面试
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/46753275
前言
打算换个工作,近一个月面试了不少的公司,下面将一些面试经验和思考分享给大家。另外校招也快要开始了,为在校的学生提供一些经验供参考,希望都能找到满意的工作。 
HTML5一个小迷宫游戏
357029540
html5
通过《HTML5游戏开发》摘抄了一个小迷宫游戏,感觉还不错,可以画画,写字,把摘抄的代码放上来分享下,喜欢的同学可以拿来玩玩!
<html>
<head>
<title>创建运行迷宫</title>
<script type="text/javascript"
10步教你上传githib数据
张亚雄
git
官方的教学还有其他博客里教的都是给懂的人说得,对已我们这样对我大菜鸟只能这么来锻炼,下面先不玩什么深奥的,先暂时用着10步干净利索。等玩顺溜了再用其他的方法。
操作过程(查看本目录下有哪些文件NO.1)ls
(跳转到子目录NO.2)cd+空格+目录
(继续NO.3)ls
(匹配到子目录NO.4)cd+ 目录首写字母+tab键+(首写字母“直到你所用文件根就不再按TAB键了”)
(查看文件
MongoDB常用操作命令大全
adminjun
mongodb 操作命令
成功启动MongoDB后,再打开一个命令行窗口输入mongo,就可以进行数据库的一些操作。输入help可以看到基本操作命令,只是MongoDB没有创建数据库的命令,但有类似的命令 如:如果你想创建一个“myTest”的数据库,先运行use myTest命令,之后就做一些操作(如:db.createCollection('user')),这样就可以创建一个名叫“myTest”的数据库。
一
bat调用jar包并传入多个参数
aijuans
下面的主程序是通过eclipse写的:
1.在Main函数接收bat文件传递的参数(String[] args)
如: String ip =args[0]; String user=args[1]; &nbs
Java中对类的主动引用和被动引用
ayaoxinchao
java 主动引用 对类的引用 被动引用 类初始化
在Java代码中,有些类看上去初始化了,但其实没有。例如定义一定长度某一类型的数组,看上去数组中所有的元素已经被初始化,实际上一个都没有。对于类的初始化,虚拟机规范严格规定了只有对该类进行主动引用时,才会触发。而除此之外的所有引用方式称之为对类的被动引用,不会触发类的初始化。虚拟机规范严格地规定了有且仅有四种情况是对类的主动引用,即必须立即对类进行初始化。四种情况如下:1.遇到ne
导出数据库 提示 outfile disabled
BigBird2012
mysql
在windows控制台下,登陆mysql,备份数据库:
mysql>mysqldump -u root -p test test > D:\test.sql
使用命令 mysqldump 格式如下: mysqldump -u root -p *** DBNAME > E:\\test.sql。
注意:执行该命令的时候不要进入mysql的控制台再使用,这样会报
Javascript 中的 && 和 ||
bijian1013
JavaScript && ||
准备两个对象用于下面的讨论
var alice = {
name: "alice",
toString: function () {
return this.name;
}
}
var smith = {
name: "smith",
[Zookeeper学习笔记之四]Zookeeper Client Library会话重建
bit1129
zookeeper
为了说明问题,先来看个简单的示例代码:
package com.tom.zookeeper.book;
import com.tom.Host;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.Wat
【Scala十一】Scala核心五:case模式匹配
bit1129
scala
package spark.examples.scala.grammars.caseclasses
object CaseClass_Test00 {
def simpleMatch(arg: Any) = arg match {
case v: Int => "This is an Int"
case v: (Int, String)
运维的一些面试题
yuxianhua
linux
1、Linux挂载Winodws共享文件夹
mount -t cifs //1.1.1.254/ok /var/tmp/share/ -o username=administrator,password=yourpass
或
mount -t cifs -o username=xxx,password=xxxx //1.1.1.1/a /win
Java lang包-Boolean
BrokenDreams
boolean
Boolean类是Java中基本类型boolean的包装类。这个类比较简单,直接看源代码吧。
public final class Boolean implements java.io.Serializable,
读《研磨设计模式》-代码笔记-命令模式-Command
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* GOF 在《设计模式》一书中阐述命令模式的意图:“将一个请求封装
matlab下GPU编程笔记
cherishLC
matlab
不多说,直接上代码
gpuDevice % 查看系统中的gpu,,其中的DeviceSupported会给出matlab支持的GPU个数。
g=gpuDevice(1); %会清空 GPU 1中的所有数据,,将GPU1 设为当前GPU
reset(g) %也可以清空GPU中数据。
a=1;
a=gpuArray(a); %将a从CPU移到GPU中
onGP
SVN安装过程
crabdave
SVN
SVN安装过程
subversion-1.6.12
./configure --prefix=/usr/local/subversion --with-apxs=/usr/local/apache2/bin/apxs --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr --with-openssl=/
sql 行列转换
daizj
sql 行列转换 行转列 列转行
行转列的思想是通过case when 来实现
列转行的思想是通过union all 来实现
下面具体例子:
假设有张学生成绩表(tb)如下:
Name Subject Result
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
*/
/*
想变成
姓名 &
MySQL--主从配置
dcj3sjt126com
mysql
linux下的mysql主从配置: 说明:由于MySQL不同版本之间的(二进制日志)binlog格式可能会不一样,因此最好的搭配组合是Master的MySQL版本和Slave的版本相同或者更低, Master的版本肯定不能高于Slave版本。(版本向下兼容)
mysql1 : 192.168.100.1 //master mysq
关于yii 数据库添加新字段之后model类的修改
dcj3sjt126com
Model
rules:
array('新字段','safe','on'=>'search')
1、array('新字段', 'safe')//这个如果是要用户输入的话,要加一下,
2、array('新字段', 'numerical'),//如果是数字的话
3、array('新字段', 'length', 'max'=>100),//如果是文本
1、2、3适当的最少要加一条,新字段才会被
sublime text3 中文乱码解决
dyy_gusi
Sublime Text
sublime text3中文乱码解决
原因:缺少转换为UTF-8的插件
目的:安装ConvertToUTF8插件包
第一步:安装能自动安装插件的插件,百度“Codecs33”,然后按照步骤可以得到以下一段代码:
import urllib.request,os,hashlib; h = 'eb2297e1a458f27d836c04bb0cbaf282' + 'd0e7a30980927
概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM
geeksun
PHP
CGI
CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。
CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等。 FastCGI
FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不
Git push 报错 "error: failed to push some refs to " 解决
hongtoushizi
git
Git push 报错 "error: failed to push some refs to " .
此问题出现的原因是:由于远程仓库中代码版本与本地不一致冲突导致的。
由于我在第一次git pull --rebase 代码后,准备push的时候,有别人往线上又提交了代码。所以出现此问题。
解决方案:
1: git pull
2:
第四章 Lua模块开发
jinnianshilongnian
nginx lua
在实际开发中,不可能把所有代码写到一个大而全的lua文件中,需要进行分模块开发;而且模块化是高性能Lua应用的关键。使用require第一次导入模块后,所有Nginx 进程全局共享模块的数据和代码,每个Worker进程需要时会得到此模块的一个副本(Copy-On-Write),即模块可以认为是每Worker进程共享而不是每Nginx Server共享;另外注意之前我们使用init_by_lua中初
java.lang.reflect.Proxy
liyonghui160com
1.简介
Proxy 提供用于创建动态代理类和实例的静态方法
(1)动态代理类的属性
代理类是公共的、最终的,而不是抽象的
未指定代理类的非限定名称。但是,以字符串 "$Proxy" 开头的类名空间应该为代理类保留
代理类扩展 java.lang.reflect.Proxy
代理类会按同一顺序准确地实现其创建时指定的接口
Java中getResourceAsStream的用法
pda158
java
1.Java中的getResourceAsStream有以下几种: 1. Class.getResourceAsStream(String path) : path 不以’/'开头时默认是从此类所在的包下取资源,以’/'开头则是从ClassPath根下获取。其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。 2. Class.getClassLoader.get
spring 包官方下载地址(非maven)
sinnk
spring
SPRING官方网站改版后,建议都是通过 Maven和Gradle下载,对不使用Maven和Gradle开发项目的,下载就非常麻烦,下给出Spring Framework jar官方直接下载路径:
http://repo.springsource.org/libs-release-local/org/springframework/spring/
s
Oracle学习笔记(7) 开发PLSQL子程序和包
vipbooks
oracle sql 编程
哈哈,清明节放假回去了一下,真是太好了,回家的感觉真好啊!现在又开始出差之旅了,又好久没有来了,今天继续Oracle的学习!
这是第七章的学习笔记,学习完第六章的动态SQL之后,开始要学习子程序和包的使用了……,希望大家能多给俺一些支持啊!
编程时使用的工具是PLSQL