php_memcache扩展

今天在一家招聘信息看到需要熟悉memcache,以前没接触过,用的都是redis,今天稍微看了下,在这里记述下一些基础点。

memcache是什么?

首先我们需要了解memcache是做什么的,他有什么作用?

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。

 

在有些地方我们会发现它会以memcached名字出现,我们只要知道他们能够指代这个缓存系统。memcache是指这个项目的名称,memcached是指系统服务端的程序。

 

memcache的安装:

下载地址:http://yunpan.cn/Q9QcS3dIAVe5A (这是我的一个网盘分享,大家也可以去网上找其他的版本下载,内含php_memcache.dll(php5.3))

网上的安装教程有很多,我在这里只简单的记述一下:

1. 下载memcache的windows版,解压放某个盘下面,比如在c:\memcached。
2. 在终端下找到解压的目录memcached,然后运行memcached.exe -d install命令。
3. 再输入memcached.exe -d start开发memcache服务。
4.下载php_memcache.dll,请自己查找对应的php版本的文件。
5. 在php.ini加入一行 extension=php_memcached.exe
6.重新启动Apache,然后查看一下phpinfo,如果有memcache,那么就说明安装成功!

 

memcached指令:

在这里也记述一下memcache的服务端的一些基本指令,大家可以通过memcached.exe -help或-h指令进行查询。

  -p  监听的TCP端口,默认是11211
  -U  监听的UDP端口,默认是11211.为0时关闭
  -l  连接的IP地址,默认是本机
  -d
      start  启动memcached服务
      restart 重启memcached服务
    stop|shutdown 关闭memcached服务
    install  安装memcached服务 
    uninstall 卸载memcached服务
  -u  以什么身份运行(仅在以root运行的时候有效)
  -m 最大使用内存,单位MB,默认64MB
  -c  最大连接数,默认为1024
  -M 内存耗尽时提示错误而不是删除项
  -f 最小分配空间 key+value+flags 默认是48
  -h 显示帮助

memcache的使用:

安装好php_memcache.dll扩展之后,那么在PHP之中就可以连接memcache进行增删改查了。下面我们一步一步的来实战memcache。

 

首先,要使用存储的数据,不管是mysql、redis、还是我们这里将的memcache都是需要预先连接的。PHP中连接memcache同redis,有使用过php_redis扩展的同学们应该都能轻车熟路的使用memcache。具体如下:

$mem = new Memcache;

//params: host, port

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

程序分析:

$mem = new Memcache;

初始化一个Memcache对象。当你配置好php_memcache.dll后就可以直接通过Memcache类生成该类的对象。若在这里出现问题的同学应该回到前面去检查检查扩展的配置了。

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

连接目标memcached服务器,第一个参数是目标IP地址,第二个参数是端口,端口可以在开启memcache服务的时候设置。若这里出现问题,未连接成功的同学们应该去检查一下memcached服务是否成功开启。

连接好服务器后,我们就要开始对数据进行操作了。我们先从保存数据开始,在php中向缓存服务器增加一个条目使用Memcache::add,如下

$mem->set(‘key1’, ‘this is first value’,0 , 60);

这句代码就是向memcache中插入一个条目,该条目的key为’key1’,值为’this is first value’;如果你希望存储的数据经过压缩,那么你可以设置第三个参数为MEMCACHE_COMPRESSED,否则设置为0就可以了。当然你可以对数据设置一个过期时间,超过这个时间缓存服务器就会删除该条数据,设置为0表示不过期。注意前者不可以超过2592000秒(30天)。Set函数同样也可以保存数组,把value值传递一个数组就可以了。

数据存储好后,那么当我们需要该条数据的时候我们就可以通过Memcache::get从服务端检索出来。具体如下:

$val = $mem->get('key1');

只需要将要检索的数据的key值传递给Memcache::get 就可以了,那么函数就会返回响应的value值。

但是有的时候我一条条数据的来检索,会不会太麻烦,而且还会增加代码量。那么Memcache::get 当然也考虑到了这点,所以他支持你给他传递一个数组类型,然后返回数组中元素对应的value值的数组。

获取key1的value之后,我突然发现是错的。那么我需要修改key1的值,memcache中我们使用Memcache::replace 来修改memcached中的数据值。具体如下:

$mem->replace('key1', 'This is replace value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val;

Replace函数的参数跟set的参数是一样的,这里就不多说了。

当我们有些数据不再需要使用的时候,那么我们就需要删除这些数据以免占空间。在memcached中我们是用Memcache::delete 来删除memcached中的key-value。具体如下:

$mem->delete('key1', 30);

Delete函数有两个参数,第一个参数为要删除数据的key值,第二个参数表示删除该元素的执行时间,就是多少时间后删除该元素,默认为0表示立即删除。

Php_memcached扩展还提供了一个把memcache服务器上的数据都清楚的函数Memcache::flush。有需要的时候直接使用$mem->flush()就可以了,没有任何参数.

 

 

posted @ 2013-10-29 20:07  boyz  阅读(383)  评论(0编辑  收藏  举报