Memcache是什么?
Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。
它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached管理这些HashTable,简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
为什么会有 Memcache
和 Memcached
两种名称?
其实 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
服务端的话,需要第三方扩展的支持,有两个扩展可以实现,memcache
和 memcached
,这里我选择 memcached
,安装 memcached
扩展,下载地址。
Linux 下安装方法如同 php
安装其他扩展一样,使用 phpize
。1
2
3
4tar 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