PHP 使用 Memcache

Memcache是什么?
Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。

它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached管理这些HashTable,简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。

为什么会有 MemcacheMemcached 两种名称?
其实 Memcache 是这个项目的名称,而memcached 是它服务器端的程序的名称,一个是项目名称,一个实现的软件名称。使用过程中你可以用项目名称,也可以直接使用软件名称。
Memcache 简单而强大,它的简单设计促进快速部署,易于开发,解决了大数据缓存面临的许多问题。

Memcache 的主要特点:

  • 基于C/S 架构 协议简单
  • 基于libevent的事件处理
  • 自主内存存储处理
  • 基于客户端的 Memcached 分布式

安装服务端 Memcached

服务端软件 Memcached,官网下载源码 下载
具体安装方式如下:

1
2
3
4
5
6
7
8
9
10
11
# 源码编译安装
wget http://memcached.org/latest
tar -zxvf memcached-1.x.x.tar.gz
cd memcached-1.x.x
./configure && make && sudo make install

# Ubuntu
apt-get install memcached

# Centos
yum install memcached

如何启动

1
/usr/bin/memcached -m 64 -c 200 -p 11211 -u memcache -l 127.0.0.1 -d

参数说明:
-m : 是分配给 Memcached 使用的内存数量,单位是MB,这里是1024MB,默认是64MB
-p : 监听端口,默认为 11211
-u : 运行 Memcached 的用户
-l : 是监听的服务器IP地址,默认应该是本机
-d : 守护进程方式启动
-c : 最大运行的并发连接数,默认是1024

使用 -h 或者 man memcached 查看更多信息。

连接 Memcached 服务器

客户端程序有很多种,可以用 telnet 连接操作 Memcached,可以自行测试,这里我重点讲述如何用 php 连接操作 Memcached
我们让 PHP 充当客户端程序,PHP 作为客户端,想链接操作 Memcached 服务端的话,需要第三方扩展的支持,有两个扩展可以实现,memcachememcached,这里我选择 memcached,安装 memcached 扩展,下载地址
Linux 下安装方法如同 php 安装其他扩展一样,使用 phpize

1
2
3
4
tar zxvf memecahed.tar.gz
phpize
./congiure
make && make install

安装完毕之后,将其 memcached.so 文件加入到 php.ini 文件中,重启开发环境。
加载新的配置文件,在 phpinfo() 中查看是否有 memcached

PHP 使用 Memcached 扩展

我们根据上述介绍安装扩展完毕之后,PHP 就支持操作 Memcached ,那么下面将演示如何使用扩展。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
$mem = new Memcached();

// 添加 memcached 服务器到实例
$mem->addServer('127.0.0.1', 11211);

// 新增一个 key 到 memcached,如果 key 存在,忽略
$mem->add('key1', 'value1', 5);

// 获取一个 key,不存在返回 false
echo $mem->get('key1');

// 一次获取多个 key
print_r($mem->getMulti(['k1', 'k2']));

// 使用 set 设置一个 key,如果存在,覆盖
$mem->set('new1', 1);
echo $mem->get('new1');
$mem->set('new1', 2);
echo $mem->get('new1');

// 存储多个元素,第一个参数传数组,第二个为过期时间,默认为 0
$mem->setMulti([
'k1' => 'value1',
'k2' => 'value2',
'k3' => 'value3'
], 10);

// 替换已存在的 key,如果不存在,失败返回 false
$mem->relace('new1', 5);
echo $mem->get('new1');

// 修改过期时间
$mem->get('new1');
$mem->touch('new1', 5);
echo $mem->get('new1');

// 删除一个 key
echo $mem->get('new1');
$mem->delete('new1');
echo $mem->get('new1');

// 操作数值自增或自减
$mem->add('num', 1);
$mem->increment('num', 2);
echo $mem->get('num');
$mem->decrement('num');
echo $mem->get('num');

// 作废缓存中的所有元素
$mem->flush();

// 检查持久链接
var_dump($mem->isPersistent());

具体可在实际开发中根据自己的需求进行操作,详情可参看 文档

©版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 & 作者信息

End

坚持原创技术分享,您的支持将鼓励我继续创作!
Flyertutor WeChat Pay

WeChat Pay

Flyertutor Alipay

Alipay