一、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中
web前段跨域nginx代理配置
刘正强
nginx cms Web
nginx代理配置可参考server部分
server {
listen 80;
server_name localhost;
spring学习笔记
caoyong
spring
一、概述
a>、核心技术 : IOC与AOP
b>、开发为什么需要面向接口而不是实现
接口降低一个组件与整个系统的藕合程度,当该组件不满足系统需求时,可以很容易的将该组件从系统中替换掉,而不会对整个系统产生大的影响
c>、面向接口编口编程的难点在于如何对接口进行初始化,(使用工厂设计模式)
Eclipse打开workspace提示工作空间不可用
0624chenhong
eclipse
做项目的时候,难免会用到整个团队的代码,或者上一任同事创建的workspace,
1.电脑切换账号后,Eclipse打开时,会提示Eclipse对应的目录锁定,无法访问,根据提示,找到对应目录,G:\eclipse\configuration\org.eclipse.osgi\.manager,其中文件.fileTableLock提示被锁定。
解决办法,删掉.fileTableLock文件,重
Javascript 面向对面写法的必要性?
一炮送你回车库
JavaScript
现在Javascript面向对象的方式来写页面很流行,什么纯javascript的mvc框架都出来了:ember
这是javascript层的mvc框架哦,不是j2ee的mvc框架
我想说的是,javascript本来就不是一门面向对象的语言,用它写出来的面向对象的程序,本身就有些别扭,很多人提到js的面向对象首先提的是:复用性。那么我请问你写的js里有多少是可以复用的,用fu
js array对象的迭代方法
换个号韩国红果果
array
1.forEach 该方法接受一个函数作为参数, 对数组中的每个元素
使用该函数 return 语句失效
function square(num) {
print(num, num * num);
}
var nums = [1,2,3,4,5,6,7,8,9,10];
nums.forEach(square);
2.every 该方法接受一个返回值为布尔类型
对Hibernate缓存机制的理解
归来朝歌
session 一级缓存 对象持久化
在hibernate中session一级缓存机制中,有这么一种情况:
问题描述:我需要new一个对象,对它的几个字段赋值,但是有一些属性并没有进行赋值,然后调用
session.save()方法,在提交事务后,会出现这样的情况:
1:在数据库中有默认属性的字段的值为空
2:既然是持久化对象,为什么在最后对象拿不到默认属性的值?
通过调试后解决方案如下:
对于问题一,如你在数据库里设置了
WebService调用错误合集
darkranger
webservice
Java.Lang.NoClassDefFoundError: Org/Apache/Commons/Discovery/Tools/DiscoverSingleton
调用接口出错,
一个简单的WebService
import org.apache.axis.client.Call;import org.apache.axis.client.Service;
首先必不可
JSP和Servlet的中文乱码处理
aijuans
Java Web
JSP和Servlet的中文乱码处理
前几天学习了JSP和Servlet中有关中文乱码的一些问题,写成了博客,今天进行更新一下。应该是可以解决日常的乱码问题了。现在作以下总结希望对需要的人有所帮助。我也是刚学,所以有不足之处希望谅解。
一、表单提交时出现乱码:
在进行表单提交的时候,经常提交一些中文,自然就避免不了出现中文乱码的情况,对于表单来说有两种提交方式:get和post提交方式。所以
面试经典六问
atongyeye
工作 面试
题记:因为我不善沟通,所以在面试中经常碰壁,看了网上太多面试宝典,基本上不太靠谱。只好自己总结,并试着根据最近工作情况完成个人答案。以备不时之需。
以下是人事了解应聘者情况的最典型的六个问题:
1 简单自我介绍
关于这个问题,主要为了弄清两件事,一是了解应聘者的背景,二是应聘者将这些背景信息组织成合适语言的能力。
我的回答:(针对技术面试回答,如果是人事面试,可以就掌
contentResolver.query()参数详解
百合不是茶
android query()详解
收藏csdn的博客,介绍的比较详细,新手值得一看 1.获取联系人姓名
一个简单的例子,这个函数获取设备上所有的联系人ID和联系人NAME。
[java]
view plain
copy
public void fetchAllContacts() {
 
ora-00054:resource busy and acquire with nowait specified解决方法
bijian1013
oracle 数据库 kill nowait
当某个数据库用户在数据库中插入、更新、删除一个表的数据,或者增加一个表的主键时或者表的索引时,常常会出现ora-00054:resource busy and acquire with nowait specified这样的错误。主要是因为有事务正在执行(或者事务已经被锁),所有导致执行不成功。
1.下面的语句
web 开发乱码
征客丶
spring Web
以下前端都是 utf-8 字符集编码
一、后台接收
1.1、 get 请求乱码
get 请求中,请求参数在请求头中;
乱码解决方法:
a、通过在web 服务器中配置编码格式:tomcat 中,在 Connector 中添加URIEncoding="UTF-8";
1.2、post 请求乱码
post 请求中,请求参数分两部份,
1.2.1、url?参数,
【Spark十六】: Spark SQL第二部分数据源和注册表的几种方式
bit1129
spark
Spark SQL数据源和表的Schema
case class
apply schema
parquet
json
JSON数据源 准备源数据
{"name":"Jack", "age": 12, "addr":{"city":"beijing&
JVM学习之:调优总结 -Xms -Xmx -Xmn -Xss
BlueSkator
-Xss -Xmn -Xms -Xmx
堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。典型设置:
java -Xmx355
jqGrid 各种参数 详解(转帖)
BreakingBad
jqGrid
jqGrid 各种参数 详解 分类:
源代码分享
个人随笔请勿参考
解决开发问题 2012-05-09 20:29 84282人阅读
评论(22)
收藏
举报
jquery
服务器
parameters
function
ajax
string
读《研磨设计模式》-代码笔记-代理模式-Proxy
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/*
* 下面
应用升级iOS8中遇到的一些问题
chenhbc
ios8 升级iOS8
1、很奇怪的问题,登录界面,有一个判断,如果不存在某个值,则跳转到设置界面,ios8之前的系统都可以正常跳转,iOS8中代码已经执行到下一个界面了,但界面并没有跳转过去,而且这个值如果设置过的话,也是可以正常跳转过去的,这个问题纠结了两天多,之前的判断我是在
-(void)viewWillAppear:(BOOL)animated
中写的,最终的解决办法是把判断写在
-(void
工作流与自组织的关系?
comsci
设计模式 工作
目前的工作流系统中的节点及其相互之间的连接是事先根据管理的实际需要而绘制好的,这种固定的模式在实际的运用中会受到很多限制,特别是节点之间的依存关系是固定的,节点的处理不考虑到流程整体的运行情况,细节和整体间的关系是脱节的,那么我们提出一个新的观点,一个流程是否可以通过节点的自组织运动来自动生成呢?这种流程有什么实际意义呢?
这里有篇论文,摘要是:“针对网格中的服务
Oracle11.2新特性之INSERT提示IGNORE_ROW_ON_DUPKEY_INDEX
daizj
oracle
insert提示IGNORE_ROW_ON_DUPKEY_INDEX
转自:http://space.itpub.net/18922393/viewspace-752123
在 insert into tablea ...select * from tableb中,如果存在唯一约束,会导致整个insert操作失败。使用IGNORE_ROW_ON_DUPKEY_INDEX提示,会忽略唯一
二叉树:堆
dieslrae
二叉树
这里说的堆其实是一个完全二叉树,每个节点都不小于自己的子节点,不要跟jvm的堆搞混了.由于是完全二叉树,可以用数组来构建.用数组构建树的规则很简单:
一个节点的父节点下标为: (当前下标 - 1)/2
一个节点的左节点下标为: 当前下标 * 2 + 1
&
C语言学习八结构体
dcj3sjt126com
c
为什么需要结构体,看代码
# include <stdio.h>
struct Student //定义一个学生类型,里面有age, score, sex, 然后可以定义这个类型的变量
{
int age;
float score;
char sex;
}
int main(void)
{
struct Student st = {80, 66.6,
centos安装golang
dcj3sjt126com
centos
#在国内镜像下载二进制包
wget -c http://www.golangtc.com/static/go/go1.4.1.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.4.1.linux-amd64.tar.gz
#把golang的bin目录加入全局环境变量
cat >>/etc/profile<
10.性能优化-监控-MySQL慢查询
frank1234
性能优化 MySQL慢查询
1.记录慢查询配置
show variables where variable_name like 'slow%' ; --查看默认日志路径
查询结果:--不用的机器可能不同
slow_query_log_file=/var/lib/mysql/centos-slow.log
修改mysqld配置文件:/usr /my.cnf[一般在/etc/my.cnf,本机在/user/my.cn
Java父类取得子类类名
happyqing
java this 父类 子类 类名
在继承关系中,不管父类还是子类,这些类里面的this都代表了最终new出来的那个类的实例对象,所以在父类中你可以用this获取到子类的信息!
package com.urthinker.module.test;
import org.junit.Test;
abstract class BaseDao<T> {
public void
Spring3.2新注解@ControllerAdvice
jinnianshilongnian
@Controller
@ControllerAdvice,是spring3.2提供的新注解,从名字上可以看出大体意思是控制器增强。让我们先看看@ControllerAdvice的实现:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Co
Java spring mvc多数据源配置
liuxihope
spring
转自:http://www.itpub.net/thread-1906608-1-1.html
1、首先配置两个数据库
<bean id="dataSourceA" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close&quo
第12章 Ajax(下)
onestopweb
Ajax
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/
BW / Universe Mappings
blueoxygen
BO
BW Element
OLAP Universe Element
Cube Dimension
Class
Charateristic
A class with dimension and detail objects (Detail objects for key and desription)
Hi
Java开发熟手该当心的11个错误
tomcat_oracle
java 多线程 工作 单元测试
#1、不在属性文件或XML文件中外化配置属性。比如,没有把批处理使用的线程数设置成可在属性文件中配置。你的批处理程序无论在DEV环境中,还是UAT(用户验收
测试)环境中,都可以顺畅无阻地运行,但是一旦部署在PROD 上,把它作为多线程程序处理更大的数据集时,就会抛出IOException,原因可能是JDBC驱动版本不同,也可能是#2中讨论的问题。如果线程数目 可以在属性文件中配置,那么使它成为
推行国产操作系统的优劣
yananay
windows linux 国产操作系统
最近刮起了一股风,就是去“国外货”。从应用程序开始,到基础的系统,数据库,现在已经刮到操作系统了。原因就是“棱镜计划”,使我们终于认识到了国外货的危害,开始重视起了信息安全。操作系统是计算机的灵魂。既然是灵魂,为了信息安全,那我们就自然要使用和推行国货。可是,一味地推行,是否就一定正确呢?
先说说信息安全。其实从很早以来大家就在讨论信息安全。很多年以前,就据传某世界级的网络设备制造商生产的交