使用Memcache在PHP中调试方法的介绍及应用 (1)

时间:2023-02-10 16:28:22


使用MemcachePHP中调试方法的介绍及应用

    如果我们在网络开发中,特别是大访问量的web项目开发中,为了提高响应速度,减少数据查询运算,那么我们都会选用memcahce。首先我们必须要安装,接下来如何使用memcache,在这里介绍下在linux下安装和windows下安装如下及配置:

一、 linux下的Memcache安装:

1.下载memcachelinux版本,注意 memcached 用 libevent 来作事件驱动,所以要先安装有 libevent

2. 安装 pecl::memcache

用 pecl 命令行工具安装:

pecl install memcache

或直接从源码安装:

phpize

./configure

make

make install

二、Windows下的Memcache安装:

  1. 下载memcachewindows稳定版,解压放某个盘下面,比如在c:\memcached

2. 在终端(也即cmd命令界面)下输入 ‘c:\memcached\memcached.exe -d install’ 安装

3. 再输入: ‘c:\memcached\memcached.exe -d start’ 启动。NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。

4.下载http://pecl4win.php.net/ext.php/php_memcache.dll,请自己查找对应的php版本的文件

5. C:\winnt\php.ini 加入一行 ‘extension=php_memcache.dll

6.重新启动Apache,然后查看一下phpinfo,如果有memcache,那么就说明安装成功!

三、memcached的基本设置:

-p 监听的端口

-l 连接的IP地址默认是本机

-d start 启动memcached服务

-d restart 重起memcached服务

-d stop|shutdown 关闭正在运行的memcached服务

-d install 安装memcached服务

-d uninstall 卸载memcached服务

-u 以的身份运行 (仅在以root运行的时候有效)

-m 最大内存使用,单位MB。默认64MB

-M 内存耗尽时返回错误,而不是删除项

-c 最大同时连接数,默认是1024

-f 块大小增长因子,默认是1.25-n 最小分配空间,key+value+flags默认是48

-h 显示帮助

四、php.ini中的配置:

[Memcache]

一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。

是否在遇到错误时透明地向其他服务器进行故障转移。

memcache.allow_failover = On

接受和发送数据时最多尝试多少个服务器,只在打开memcache.allow_failover时有效。memcache.max_failover_attempts = 20

数据将按照此值设定的块大小进行转移。此值越小所需的额外网络传输越多。如果发现无法解释的速度降低,可以尝试将此值增加到32768

memcache.chunk_size = 8192

连接到memcached服务器时使用的默认TCP端口。

memcache.default_port = 11211

控制将key映射到server的策略。默认值"standard"表示使用先前版本的老hash策略。

设为"consistent"可以允许在连接池中添加/删除服务器时不必重新计算keyserver之间的映射关系。

memcache.hash_strategy = "standard"; 

控制将key映射到server的散列函数。默认值"crc32"使用CRC32算法,而"fnv"则表示使用FNV-1a算法。 FNV-1aCRC32速度稍低,但是散列效果更好。

memcache.hash_function = "crc32"

memcache也可以作为session的存储模块,具体参看:memcache PHP 的 session.save_handler.

   1. $memcache = new Memcache;   

   2. $memcache->connect('localhost', 11211) or die ("Could not connect");   

   3.   

   4. $version = $memcache->getVersion();   

   5. echo "Server's version: ".$version."<BR>\n";   

   6.   

   7. $tmp_object = new stdClass;   

   8. $tmp_object->str_attr = 'test';   

   9. $tmp_object->int_attr = 123;   

  10.   

  11. $memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at the server");   

  12. echo "Store data in the cache (data will expire in 10 seconds)<BR>\n";   

  13.   

  14. $get_result = $memcache->get('key');   

  15. echo "Data from the cache:<BR>\n";   

  16.   

  17. var_dump($get_result);  

我们已经安装好了,也配置好了memcache,现在接下来如何调试memcache.

来做个测试。

  先搞个表:

create table t(id char(36) not null primary key, username varchar(20) not null);

  插点数据:

insert into t values (uuid(),'Livia'),(uuid(),'Lucy'),(uuid(),'Sivia'),(uuid(),'david');

  写个简单脚本测试一下。

<?php 

$host = '192.168.1.21:3306'; 

$user = 'webuser'; 

$passwd = '123456'; 

$db = 'test'; 

$conn = mysql_connect($host,$user,$passwd); 

mysql_select_db($db,$conn); 

$sql = 'select * from t order by id desc'; 

$result = mysql_query($sql,$conn); 

while ($row = mysql_fetch_array($result,MYSQL_ASSOC)){ 

$test_key[] = $row; 

$sql = md5($sql); 

$mem = new Memcache; 

$mem->connect("192.168.1.21", 11211); 

$mem->set($sql,$test_key, MEMCACHE_COMPRESSED, 600);

print_r($mem->get($sql)); 

?>

  看看结果出来了。

C:\>php -f "d:/lamp/web2/phpinfo.php" 

Array 

[0] => Array 

[id] => d8f1ec2a-c033-11dd-bd1a-002215c94322 

[username] => david 

)

[1] => Array 

[id] => d8f1eb9e-c033-11dd-bd1a-002215c94322 

[username] => Sivia 

)

[2] => Array 

[id] => d8f1ea9a-c033-11dd-bd1a-002215c94322 

[username] => Lucy 

)

[3] => Array 

[id] => d8f1e658-c033-11dd-bd1a-002215c94322 

[username] => Livia 

)

)

现在我们已经介绍Memcache安装,不再赘述。再次着重介绍memcache的一些常用方法。

Memcache::add // 添加一个值,如果已经存在,则返回false

Memcache::addServer // 添加Memcache地址

Memcache::close // 关闭一个Memcache的连接

Memcache::connect // 打开一个到Memcache的连接

Memcache::decrement // 对保存的某个key中的值进行减法操作

Memcache::delete // 删除一个Memcache上的key

Memcache::flush // 刷新所有Memcache上保存的项目(类似于删除所有的保存的项目)

Memcache::get // Memcache上获取一个key

Memcache::getExtendedStats // 获取进程池中所有进程的运行系统统计

Memcache::getServerStatus // 获取运行服务器的参数

Memcache::getStats //获取当前Memcache服务器运行的状态

Memcache::getVersion // 返回运行的Memcache的版本信息

Memcache::increment // 对保存的某个key中的值进行加法操作

Memcache::pconnect // 打开一个到Memcache的长连接

Memcache::replace // 替换一个已经存在Memcache服务器上的项目(功能类似Memcache::set

Memcache::set // Memcache添加一个值,如果已经存在,则覆写

Memcache::setCompressThreshold // 对大于某一大小的数据进行压缩

Memcache::setServerParams // 在运行时修改服务器的参数

下面是一些简单的用法实例,仅供参考:

  <?php

  $mem = new Memcache;

  $mem->connect("127.0.0.1", 12000);

  //Memcache::set方法有四个参数,第一个参数是key,第二个参数是value,第三个参数可选,表示是否压缩保存,第四个参数可选,用来设置一个过期自动销毁的时间。

  $mem->set('test','123',0,60);

  //Memcache::add方法的作用和Memcache::set方法类似,区别是如果 Memcache::add方法的返回值为false,表示这个key已经存在,而Memcache::set方法则会直接覆写。

$mem->add('test','123',0,60);

//Memcache::get方法的作用是获取一个key值,Memcache::get方法有一个参数,表示key

$mem->get('test');//输出为'123'

//Memcache::replace 方法的作用是对一个已有的key进行覆写操作,Memcache::replace方法有四个参数,作用和Memcache::set方法的相同。

$mem->replace('test','456',0,60);

 //Memcache::delete方法的作用是删除一个key值,Memcache::delete方法有两个参数,第一个参数表示key,第二个参数可选,表示删除延迟的时间。

$mem->delete('test',60);

?>

   

                                                                     肖承湖

PHP缓存应用:PHP MEMCACHE 详解

2010-01-28 09:38:44 来源:中国站长站综合 【  】 评论:0 条 我要投稿 收藏本文 分享至微博 

站长交易(http://jy.chinaz.com)帮站长赚钱 虚拟主机评测+IDC导航=IDC123.COM

Memcache函数库是在PECL(PHP Extension Community Library)中,主要作用是搭建大容量的内存数据的临时存放区域,在分布式的时候作用体现的非常明显,否则不建议使用。在ubuntu上安装完运行的时候报错:


/usr/local/memcached/bin/memcached: error while loading shared libraries: libevent-1.4.so.2: 

cannot open shared object file: No such file or directory 

按照:《libeven、memcached、libmemcache安装》中的方法,使用:

sudo ln -s /usr/local/lib/libevent-1.4.so.2 /usr/lib/libevent-1.4.so.2

可以修正这个BUG

通过新得立安装php的memcached模块,注销/etc/php5/conf.d/memcached.ini里面的“;”,重启apache,调用phpinfo()出现memcached的信息。

 


< ?php    
$memcache = new Memcache;    
$memcache->connect('localhost', 11211) or die ("Could not connect");    
$version = $memcache->getVersion();    
echo "Server's version: ".$version."\n";    
?>

1. <?php    

2. $memcache = new Memcache;    

3. $memcache->connect('localhost', 11211) or die ("Could not connect");    

4. print_r($memcache->getStats());    

5. /**   

6. * Array   

7. * (   

8. *     [pid] => 8052   

9. *     [uptime] => 9205   

10. *     [time] => 1205898428   

11. *     [version] => 1.2.5   

12. *     [pointer_size] => 32   

13. *     [rusage_user] => 0.008000   

14. *     [rusage_system] => 0.000000   

15. *     [curr_items] => 1   

16. *     [total_items] => 17   

17. *     [bytes] => 57   

18. *     [curr_connections] => 2   

19. *     [total_connections] => 15   

20. *     [connection_structures] => 3   

21. *     [cmd_get] => 9   

22. *     [cmd_set] => 23   

23. *     [get_hits] => 5   

24. *     [get_misses] => 4   

25. *     [evictions] => 0   

26. *     [bytes_read] => 671   

27. *     [bytes_written] => 850   

28. *     [limit_maxbytes] => 10485760   

29. *     [threads] => 1   

30. * )   

31. */    

32. ?>  

 

 

 


01.<?php 
02.$memcache = new Memcache; 
03.$memcache->connect('localhost', 11211) or die ("Could not connect"); 
04.$memcache->set( 'name', 'leo', 0, 30); 
05.if(!$memcache->add( 'name', 'susan', 0, 30)) 
06.{ 
07. echo 'susan is exist'; 
08.}; 
09.$memcache->replace( 'name', 'lion', 0, 300); 
10.echo $memcache->get( 'name'); 
11.$memcache->delete( 'name', 5); 
12.?> 

 


01.<?php 
02.function _callback_memcache_failure($host, $port) { 
03. print "memcache '$host:$port' failed"; 
04.} 
05.$memcache = new Memcache; 
06.$memcache->addServer('192.168.1.116', 11211); 
07.$memcache->setServerParams('192.168.1.116', 11211, 1, 15, true, 
08. 
09.'_callback_memcache_failure'); 
10.echo $memcache->getServerStatus('192.168.1.116', 11211); 
11.?>