memcached

2018-10-23 鲁鲁槟 收藏

一、简介

1.1、什么是 memcache

Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。

Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。本质上,它是一个简洁的key-value存储系统。

memcached作为高速运行的分布式缓存服务器,具有以下的特点:

  • 协议简单

  • 基于libevent的事件处理

  • 内置内存存储方式

  • memcached不互相通信的分布式

1.2、Linux Memcached 安装

①、安装 libevent

libevent提供了一组应用程序编程接口(API),让程序员可以设置某些事件发生时所运行的函数,也就是说,libevent可以用来取代网上服务器所使用的事件循环检查框架。

由于可以省去对网上的处理,且拥有不错的性能,有些软件使用libevent作为网上底层的库,如:memcached、Tor。

查看是否已安装

ls -al /usr/local/lib | grep libevent

#或者
ls -al /usr/lib | grep libevent

下载libevent安装包

wget https://github.com/downloads/libevent/libevent/libevent-2.0.18-stable.tar.gz

解压

sudo tar -xvf libevent-2.0.18-stable.tar.gz

移动目录

mv libevent-2.0.18-stable /usr/local/libevent

切换到解压后的 libevent 主目录

cd /usr/local/libevent

依次执行:

sudo ./configure -prefix=/usr/local/libevent
sudo make
sudo make install

查看是否安装成功

ls -al /usr/local/lib | grep libevent

#或者
ls -al /usr/lib | grep libevent

如果libevent的安装目录为/usr/local/lib下,则还需要建立 libevent-2.0.so.5 到 /usr/lib 的软连接,这样其他程序运行时才能找到libevent库:

ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5

#或者
ln -s /usr/local/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5

②、安装 cyrus-sasl-devel

SASL全称Simple Authentication and Security Layer,是一种用来扩充C/S模式验证能力的机制。 简单来说SASL是一个胶合(glue)库,通过这个库把应用层与形式多样的认证系统整合在一起。这有点类似于 PAM,但是后者是认证方式,决定什么人可以访问什么服务,而SASL是认证过程,侧重于信任建立过程,这个过程可以调用PAM来建立信任关系。在这里Memcached就是上面提到的应用层,具体的认证交给SASL库,SASL会根据相应的认证机制来完成验证功能。

查看是否安装

saslauthd -v

安装

yum install cyrus-sasl*

启动

/etc/init.d/saslauthd start

开机启动

chkconfig saslauthd on

设置密码验证机制

saslauthd -v

saslauthd 2.1.23
authentication mechanisms: getpwent kerberos5 pam rimap shadow ldap

当前可使用的密码验证方法有getwent、kerberos5、pam、rimap、shadow和ldap为简单起见,这里准备采用shadow验证方法,也就是直接用/etc/shadow文件中的用户账户及密码进行验证。因此,在配置文件/etc/sysconfig/saslauthd中,应修改当前系统所采用的密码验证机制为shadow,即:

MECH=shadow

创建 memcached 用户

useradd memcached
passwd memcached

#这里密码设置为123456

重启saslauthd进程

/etc/init.d/saslauthd restart

验证是否成功

/usr/sbin/testsaslauthd -u memcached -p 123456

给 memcached 服务添加可访问的用户 memcached

/usr/sbin/saslpasswd2 -a memcached -c memcached
#要求输入密码

查看用户

sasldblistusers2 
/etc/init.d/saslauthd restart

删除用户

saslpasswd2 -d memcached

查看已安装的sasl

yum search sasl | grep dev
yum search sasl | grep lib

要能够使用SASL服务应要确保有cyrus-sasl-devel和cyrus-sasl-lib两个包,如果缺少这两个包,在安装带—enable-sasl参数的Memcached时会有错误提示:

configure: error: Failed to locate the library containing sasl_server_init

③、安装 memcache

下载最新版本(需要注意的是memcached在1.4.3版本之后才支持sasl)

wget http://memcached.org/latest

解压源码

tar -zxvf memcached-1.5.10.tar.gz

移动目录

mv memcached-1.5.10 /usr/local/memcached

切换到解压后的 memcached 主目录

cd /usr/local/memcached

依次执行:

./configure --enable-sasl --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
make
make install
cp /usr/local/memcached/bin/memcached /usr/local/bin/

启动

/usr/local/bin/memcached -p 11211 -m 64m -d -u nobody
  • 后台启动:-d

  • 不能使用root来启动:-u nobody

/usr/local/bin/memcached -p 11211 -m 64m -d -u memcached -S
  • 启用sasl进行用户认证:-S

进入控制台

 telnet 127.0.0.1 11211
 
 quit #退出控制台命令

memcached的常用指令如下:

  • -l :指定进程监听的地址;

  • -d: 以服务模式运行;

  • -u :以指定的用户身份运行memcached进程;

  • -m :用于缓存数据的最大内存空间,单位为MB,默认为64MB;

  • -c :最大支持的并发连接数,默认为1024;

  • -p : 指定监听的TCP端口,默认为11211;

  • -U :指定监听的UDP端口,默认为11211,0表示关闭UDP端口;

  • -t :用于处理入站请求的最大线程数,仅在memcached编译时开启了支持线程才有效;

  • -f :设定Slab Allocator定义预先分配内存空间大小固定的块时使用的增长因子;

  • -M:当内存空间不够使用时返回错误信息,而不是按LRU算法利用空间;

  • -n: 指定最小的slab chunk大小;单位是字节;

  • -S: 启用sasl进行用户认证;

④、memcached添加IP白名单,只允许指定服务器调用

使用 Linux 防火墙的配置工具——iptables

#禁止所有 IP 访问 11211 端口
iptables -A INPUT -p tcp --dport 11211 -j REJECT
#允许本地 127.0.0.1 访问 11211 端口
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 11211 -j ACCEPT
#允许目标IP 139.199.201.210 访问 11211 端口
iptables -I INPUT -s 139.199.201.210 -p tcp --dport 11211:11213 -j ACCEPT

这样只有本机 127.0.0.1 和目标 IP 139.199.201.210 能操作 memcached 服务了

二、Memcached 命令

2.1、Memcached 存储命令

①、set 命令

set 命令用于将 value(数据值) 存储在指定的 key(键) 中。如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用。

set key flags exptime bytes [noreply] 
value

参数说明如下:

  • key:键值 key-value 结构中的 key,用于查找缓存值。

  • flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。

  • exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)

  • bytes:在缓存中存储的字节数

  • noreply(可选): 该参数告知服务器不需要返回数据

  • value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)

以下实例中我们设置:

  • key → lulublog

  • flag → 0

  • exptime → 900 (以秒为单位)

  • bytes → 9 (数据存储的字节数)

  • value → memcached

set lulublog 0 900 9
memcached
STORED

get lulublog
VALUE lulublog 0 9
memcached
END

输出信息说明:

  • STORED:保存成功后输出。

  • ERROR:在保存失败后输出。

②、add 命令

Memcached add 命令用于将 value(数据值) 存储在指定的 key(键) 中。 如果 add 的 key 已经存在,则不会更新数据(过期的 key 会更新),之前的值将仍然保持相同,并且您将获得响应 NOT_STORED。

add key flags exptime bytes [noreply]
value
add lulublog 0 900 9
memcached
NOT_STORED

输出信息说明:

  • STORED:保存成功后输出。

  • NOT_STORED :在保存失败后输出。

③、replace 命令

Memcached replace 命令用于替换已存在的 key(键) 的 value(数据值)。 如果 key 不存在,则替换失败,并且您将获得响应 NOT_STORED。

replace key flags exptime bytes [noreply]
value
replace lulublog 0 900 5
redis
STORED

get lulublog
VALUE lulublog 0 5
redis
END

输出信息说明:

  • STORED:保存成功后输出。

  • NOT_STORED:执行替换失败后输出。

④、append 命令

Memcached append 命令用于向已存在 key(键) 的 value(数据值) 后面追加数据 。

append key flags exptime bytes [noreply]
value
append lulublog 0 900 4
test
STORED

get lulublog
VALUE lulublog 0 9
redistest
END

输出信息说明:

  • STORED:保存成功后输出。

  • NOT_STORED:该键在 Memcached 上不存在。

  • CLIENT_ERROR:执行错误。

⑤、prepend 命令

Memcached prepend 命令用于向已存在 key(键) 的 value(数据值) 前面追加数据 。

prepend key flags exptime bytes [noreply]
value
prepend lulublog 0 900 4
love
STORED

get lulublog
VALUE lulublog 0 13
loveredistest
END

输出信息说明:

  • STORED:保存成功后输出。

  • NOT_STORED:该键在 Memcached 上不存在。

  • CLIENT_ERROR:执行错误。

⑥、CAS 命令

Memcached CAS(Check-And-Set 或 Compare-And-Swap) 命令用于执行一个"检查并设置"的操作 它仅在当前客户端最后一次取值后,该key 对应的值没有被其他客户端修改的情况下, 才能够将值写入。 检查是通过cas_token参数进行的, 这个参数是Memcach指定给已经存在的元素的一个唯一的64位值。

cas key flags exptime bytes unique_cas_token [noreply]
value
  • unique_cas_token通过 gets 命令获取的一个唯一的64位值。

要在 Memcached 上使用 CAS 命令,你需要从 Memcached 服务商通过 gets 命令获取令牌(token)。 gets 命令的功能类似于基本的 get 命令。两个命令之间的差异在于,gets 返回的信息稍微多一些:64 位的整型值非常像名称/值对的 "版本" 标识符。

cas tp 0 900 9
ERROR             <− 缺少 token

cas tp 0 900 9 2
memcached
NOT_FOUND         <− 键 tp 不存在

set tp 0 900 9
memcached
STORED

gets tp
VALUE tp 0 9 1
memcached
END

cas tp 0 900 5 1
redis
STORED

get tp
VALUE tp 0 5
redis
END

输出信息说明:

  • STORED:保存成功后输出。

  • ERROR:保存出错或语法错误。

  • EXISTS:在最后一次取值后另外一个用户也在更新该数据。

  • NOT_FOUND:Memcached 服务上不存在该键值。

2.2、Memcached 查找命令

①、get 命令

Memcached get 命令获取存储在 key(键) 中的 value(数据值) ,如果 key 不存在,则返回空。

get key

get key1 key2 key3

参数说明如下:

  • key:键值 key-value 结构中的 key,用于查找缓存值。

set lulublog 0 900 9
memcached
STORED
get lulublog
VALUE lulublog 0 9
memcached
END

②、gets 命令

Memcached gets 命令获取带有 CAS 令牌存 的 value(数据值) ,如果 key 不存在,则返回空。

gets key

gets key1 key2 key3
set lulublog 0 900 9
memcached
STORED
gets lulublog
VALUE lulublog 0 9 1
memcached
END

在 使用 gets 命令的输出结果中,在最后一列的数字 1 代表了 key 为 lulublog 的 CAS 令牌。

③、delete 命令

Memcached delete 命令用于删除已存在的 key(键)。

delete key [noreply]
set lulublog 0 900 9
memcached
STORED
get lulublog
VALUE lulublog 0 9
memcached
END
delete lulublog
DELETED
get lulublog
END
delete lulublog
NOT_FOUND

输出信息说明:

  • DELETED:删除成功。

  • ERROR:语法错误或删除失败。

  • NOT_FOUND:key 不存在。

④、incr 与 decr 命令

Memcached incr 与 decr 命令用于对已存在的 key(键) 的数字值进行自增或自减操作。 incr 与 decr 命令操作的数据必须是十进制的32位无符号整数。

incr key increment_value

decr key decrement_value
  • increment_value: 增加的数值。

  • decrement_value: 减少的数值。

set visitors 0 900 2
10
STORED
get visitors
VALUE visitors 0 2
10
END
incr visitors 5
15
get visitors
VALUE visitors 0 2
15
END
set visitors 0 900 2
10
STORED
get visitors
VALUE visitors 0 2
10
END
decr visitors 5
5
get visitors
VALUE visitors 0 1
5
END

输出信息说明:

  • NOT_FOUND:key 不存在。

  • CLIENT_ERROR:自增值不是对象。

  • ERROR其他错误,如语法错误等。

2.3、Memcached 统计命令

①、stats 命令

Memcached stats 命令用于返回统计信息例如 PID(进程号)、版本号、连接数等。

stats

这里显示了很多状态信息,下边详细解释每个状态项:

  • pid:memcache服务器进程ID

  • uptime:服务器已运行秒数

  • time:服务器当前Unix时间戳

  • version:memcache版本

  • pointer_size:操作系统指针大小

  • rusage_user:进程累计用户时间

  • rusage_system:进程累计系统时间

  • curr_connections:当前连接数量

  • total_connections:Memcached运行以来连接总数

  • connection_structures:Memcached分配的连接结构数量

  • cmd_get:get命令请求次数

  • cmd_set:set命令请求次数

  • cmd_flush:flush命令请求次数

  • get_hits:get命令命中次数

  • get_misses:get命令未命中次数

  • delete_misses:delete命令未命中次数

  • delete_hits:delete命令命中次数

  • incr_misses:incr命令未命中次数

  • incr_hits:incr命令命中次数

  • decr_misses:decr命令未命中次数

  • decr_hits:decr命令命中次数

  • cas_misses:cas命令未命中次数

  • cas_hits:cas命令命中次数

  • cas_badval:使用擦拭次数

  • auth_cmds:认证命令处理的次数

  • auth_errors:认证失败数目

  • bytes_read:读取总字节数

  • bytes_written:发送总字节数

  • limit_maxbytes:分配的内存总大小(字节)

  • accepting_conns:服务器是否达到过最大连接(0/1)

  • listen_disabled_num:失效的监听数

  • threads:当前线程数

  • conn_yields:连接操作主动放弃数目

  • bytes:当前存储占用的字节数

  • curr_items:当前存储的数据总数

  • total_items:启动以来存储的数据总数

  • evictions:LRU释放的对象数目

  • reclaimed:已过期的数据条目来存储新数据的数目

②、stats items 命令

Memcached stats items 命令用于显示各个 slab 中 item 的数目和存储时长(最后一次访问距离现在的秒数)。

stats items
stats items
STAT items:1:number 1
STAT items:1:age 7
STAT items:1:evicted 0
STAT items:1:evicted_nonzero 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0
STAT items:1:reclaimed 0
STAT items:1:expired_unfetched 0
STAT items:1:evicted_unfetched 0
END

③、stats slabs 命令

Memcached stats slabs 命令用于显示各个slab的信息,包括chunk的大小、数目、使用情况等。

stats slabs
stats slabs
STAT 1:chunk_size 96
STAT 1:chunks_per_page 10922
STAT 1:total_pages 1
STAT 1:total_chunks 10922
STAT 1:used_chunks 1
STAT 1:free_chunks 10921
STAT 1:free_chunks_end 0
STAT 1:mem_requested 71
STAT 1:get_hits 0
STAT 1:cmd_set 1
STAT 1:delete_hits 0
STAT 1:incr_hits 0
STAT 1:decr_hits 0
STAT 1:cas_hits 0
STAT 1:cas_badval 0
STAT 1:touch_hits 0
STAT active_slabs 1
STAT total_malloced 1048512
END

④、stats sizes 命令

Memcached stats sizes 命令用于显示所有item的大小和个数。 该信息返回两列,第一列是 item 的大小,第二列是 item 的个数。

stats sizes
stats sizes
STAT 96 1
END

⑤、flush_all 命令

Memcached flush_all 命令用于清理缓存中的所有 key=>value(键=>值) 对。 该命令提供了一个可选参数 time,用于在制定的时间后执行清理缓存操作。

flush_all [time] [noreply]
set lulublog 0 900 9
memcached
STORED
get lulublog
VALUE lulublog 0 9
memcached
END
flush_all
OK
get lulublog
END

2.4、memcached 进阶

①、Memcached 备份、还原的方式

—— 方法一:memcached-tool

A、设置 lulublog 缓存

telnet 127.0.0.1 11211
set lulublog 0 900 9
memcached
quit

B、备份本地的 memcached

cd /usr/local/src
wget https://raw.githubusercontent.com/memcached/memcached/master/scripts/memcached-tool --no-check-certificate
chmod +x ./memcached-tool
./memcached-tool 127.0.0.1:11211 dump > data #将文件备份在data中,在/usr/local/src会生成data文件

#输出
Dumping memcache contents

C、清除 lulublog 缓存

telnet 127.0.0.1 11211
delete  lulublog
quit

D、安装 nc

Linux Netcat 命令用法简介 netcat(简写是nc)是linux上非常有用的网络工具,它能通过TCP和UDP在网络中读写数据。 通过配合使用其他工具和重定向,可以在脚本中以多种方式使用它。

yum install nc.x86_64

E、还原

cd /usr/local/src
nc 127.0.0.1 11211 < data #还原

F、验证

telnet 127.0.0.1 11211
get lulublog

#输出
VALUE lulublog 0 9
memcached
END

—— 方法二:php 版本

A、安装 php 扩展 php-memcache

B、下载 m.php 到服务器

C、设置 lulublog 缓存

telnet 127.0.0.1 11211
set lulublog 0 900 9
memcached
quit

D、备份

#切换到 m.php 所在目录
php m.php -h 127.0.0.1 -p 11211 -op backup

#输出
Memcached Data has been saved to file :memcacheData.txt

E、清除 lulublog 缓存

telnet 127.0.0.1 11211
delete  lulublog
quit

F、还原

#切换到 m.php 所在目录
php m.php -h 127.0.0.1 -p 11211 -op restore

#输出
Memcached Data has been restored from file: memcacheData.txt

G、验证

telnet 127.0.0.1 11211
get lulublog

#输出
VALUE lulublog 0 9
memcached
END

三、PHP 与 memcached

3.1、安装扩展

①、PHP扩展 memcache 与 memcached 的区别

PHP操作memcached服务有两个扩展 memcache 和 memcached。

  • memcache扩展支持面向对象和面向过程两种接口。它的函数受php.ini影响,所以必须在php.ini配置文件中设置。该扩展出现时间较早(2004年)。PHP Memcache 扩展包下载地址

  • memcached 扩展使用了libmemcached库提供的api与memcached服务端进行交互。 所以安装时需要先安装libmemcached库。 memcached扩展只支持面向对象的接口。 安装时不需要在php.ini中配置,只引入 extension即可。 该扩展出现时间较晚(2009年)。 memcached功能比memcache更全,支持的函数更多。PHP Memcached 扩展包下载地址

推荐使用memcached扩展。memcached功能更全一点。

②、linux 安装 php-memcache(记得看扩展包是否支持你的PHP版本)

cd usr/local/src
wget http://pecl.php.net/get/memcache-3.0.8.tgz
tar -zxvf memcache-3.0.8.tgz
cd memcache-3.0.8
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

打开你的php.ini文件在最后添加以下内容

extension = memcache.so

通过浏览器访问 phpinfo() 函数,查看是否有 memcache 扩展

③、linux 安装 php-memcached(记得看扩展包是否支持你的PHP版本)

A、安装 libmemcached

cd /usr/local/src
wget http://pecl.php.net/get/memcache-3.0.8.tgz
tar -zxvf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18
./configure --prefix=/usr/local/libmemcached --with-memcached
make && make install

B、安装 php-memcached

cd usr/local/src
wget http://pecl.php.net/get/memcached-3.0.4.tgz#这是php7的 
tar -zxvf memcached-3.0.4.tgz
cd memcached-3.0.4
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached
make && make install

C、打开你的php.ini文件在最后添加以下内容

echo "extension=memcached.so" >> /etc/php.ini #/etc/php.ini为php.ini路径
extension = memcached.so

D、添加完后重新启动 php-fpm

pkill php-fpm
/usr/local/php/sbin/php-fpm

E、检查安装结果

/usr/local/php/bin/php -m | grep memcached

安装成功会输出:memcached。

或者通过浏览器访问 phpinfo() 函数

01.png

问题集锦:

A、如果编译过程中

WARNING: You will need re2c 0.13.4 or later

解决

yum -y install re2c

B、如果yum安装的php报错:checking for zlib location... configure: error: memcached support requires ZLIB.

解决方法:

yum -y install zlib-devel

C、configure: error: no, sasl.h is not available. Run configure with --disable-memcached-sasl to disable this check

解决方法:在配置选项中加入--disable-memcached-sasl这功能比较诡异而且没用,禁用它

D、Centos 下使用 yum 命令快速安装 Memcached 与 php-memcached:

rpm qa|grep memcached //首先检查memcache是否已经安装完成
yum install  memcached //(提示你是否确认安装输入y)检查完成后执行安装命令
yum install  php-memcached //安装php的memcache的扩展
systemctl start httpd //开启apache
systemctl start memcached //开启memcached
setenforce

E、这些函数的行为受 php.ini 中的设置影响。

  • memcached.sess_locking integer 开启session支持。有效值: On, Off, 默认值 On.

  • memcached.sess_consistent_hash integer Memcached 是否使用一致性哈希保存session。如果为On,session数据保存则使用一致性哈希模式。 使用一致性哈希,可以保证你在增加或删除memcached服务器节点的时候不会导致session大规模的失效。 默认此项是关闭的。

  • memcached.sess_binary integer Memcached session是否使用二进制模式。如果Libmemcached 开启二进制模式。默认值是 Off.

  • memcached.sess_lock_wait integer Session 自旋锁等待时间(微秒)。请小心设置此值。值的类型是整数,当此值被设置为0的时候,lock wait的时间将会使用系统默认值,Memcached扩展中默认值是150000。

  • memcached.sess_prefix string 设置memcached session key的前缀。session前缀最长为219字节长的字符串。默认值是“memc.sess.key.”。

  • memcached.sess_number_of_replicas integer 使用memcached写session多少个副本。

  • memcached.sess_randomize_replica_read integer Memcached session 是否随机复制读。默认值0

  • memcached.sess_remove_failed integer 是否允许自动剔除出故障的memcached服务器。默认值0

  • memcached.compression_type string 设置memcached的压缩类型,允许的值为fastlz, zlib。默认值是fastlz(快速无损压缩,性能不错)。

  • memcached.compression_factor float 压缩因子. 保存时压缩因子超过设置的极限才会将数据压缩存储。存储压缩条件: plain_len > comp_len * factor。默认是1.3 (节省23%的空间)。

  • memcached.compression_threshold integer 压缩阈值。不压缩的序列化值低于此阈值。默认值是2000字节。

  • memcached.serializer string 设置缓存对象的默认序列化程序。有效值: php, igbinary, json, json_array.

3.2、PHP 操作 Memcached

官方文档

①、addServer、addServers、getserverbykey、getserverlist、setSaslAuthData、resetServerList

//向服务器池中增加一个服务器
public bool Memcached::addServer ( string $host , int $port [, int $weight = 0 ] )
//向服务器池中增加多台服务器
public bool Memcached::addServers ( array $servers )
//获取一个key所映射的服务器信息
public array Memcached::getServerByKey ( string $server_key )
//获取服务器池中的服务器列表
public array Memcached::getServerList ( void )
//设置用于身份验证的凭据
public void Memcached::setSaslAuthData ( string $username , string $password )
//清除服务器列表中的所有服务器
public bool Memcached::resetServerList ( void )
  • host:memcached服务端主机名。如果主机名无效,相关的数据操作的返回代码将被设置为Memcached::RES_HOST_LOOKUP_FAILURE。

  • port:memcached服务端端口号,通常是11211。

  • weight:此服务器相对于服务器池中所有服务器的权重。此参数用来控制服务器在操作时被选种的概率。这个仅用于一致性 分布选项,并且这个值通常是由服务端分配的内存来设置的。

<?php
$m = new Memcached();
$m->addServer("mem1.domain.com", 11211, 33);
$m->addServer("mem2.domain.com", 11211, 67);

③、add、addByKey、getByKey

//向一个新的key下面增加一个元素
public bool Memcached::add ( string $key , mixed $value [, int $expiration ] )
//在指定服务器上的一个新的key下增加一个元素
public bool Memcached::addByKey ( string $server_key , string $key , mixed $value [, int $expiration ] )
//从特定的服务器检索元素
public mixed Memcached::getByKey ( string $server_key , string $key [, callback $cache_cb [, float &$cas_token ]] )
<?php
$m = new Memcached();
$m->addServer("127.0.0.1",11211);
if($m->add("mystr","this is a memcache test!",3600)){
    echo "原始数据缓存成功!";
}else{
    echo "数据已存在:".$m->get("mystr");
}

Memcached::getByKey()除了可以通过server_key参数自由的指定key 所映射的服务器外, 在功能上等同于Memcached::get()

  • $server_key也是一个普通的key, *ByKey系列接口的工作过程是: 首先, 对$server_key进行hash, 得到$server_key应该存储的服务器, 然后将相应的操作在 $server_key所在的服务器上进行。

  • cache_cb:通读缓存回掉函数或NULL.

  • cas_token:检索的元素的CAS标记值

④、append、appendByKey、replace、replaceByKey

//向已存在元素后追加数据
public bool Memcached::append ( string $key , string $value )
//向指定服务器上已存在元素后追加数据
public bool Memcached::appendByKey ( string $server_key , string $key , string $value )
//替换已存在key下的元素
public bool Memcached::replace ( string $key , mixed $value [, int $expiration ] )
//从指定服务器上替换已存在key下的元素
public bool Memcached::replaceByKey ( string $server_key , string $key , mixed $value [, int $expiration ] )

⑤、cas、casByKey

//比较并交换值
public bool Memcached::cas ( float $cas_token , string $key , mixed $value [, int $expiration ] )
//在指定服务器上比较并交换值
public bool Memcached::casByKey ( float $cas_token , string $server_key , string $key , mixed $value [, int $expiration] )

⑥、decrement、decrementByKey、increment、incrementByKey

//减小数值元素的值
public int Memcached::decrement ( string $key [, int $offset = 1 ] )
//减少指定服务器上数值元素的值
public int Memcached::decrementByKey ( string $server_key , string $key [, int $offset = 1 [, int $initial_value = 0 [, int $expiry = 0 ]]] )
//增加数值元素的值
public int Memcached::increment ( string $key [, int $offset = 1 ] )
//增加指定服务器上数值元素的值
public int Memcached::incrementByKey ( string $server_key , string $key [, int $offset = 1 [, int $initial_value = 0 [, int $expiry = 0 ]]] )

⑦、delete、deletebykey、deleteMulti、deleteMultiByKey

//删除一个元素
public bool Memcached::delete ( string $key [, int $time = 0 ] ) //time 服务端等待删除该元素的总时间(或一个Unix时间戳表明的实际删除时间).
//从指定的服务器删除一个元素
public bool Memcached::deleteByKey ( string $server_key , string $key [, int $time = 0 ] )
//批量删除元素
public array Memcached::deleteMulti ( array $keys [, int $time = 0 ] )
//从指定的服务器批量删除元素
public bool Memcached::deleteMultiByKey ( string $server_key , array $keys [, int $time = 0 ] )

⑧、get、getByKey、getAllKeys、getMulti、getMultiByKey

//检索一个元素
public mixed Memcached::get ( string $key [, callback $cache_cb [, float &$cas_token ]] ) //ache_cb通读缓存回掉函数或NULL.
//从特定的服务器检索元素
public mixed Memcached::getByKey ( string $server_key , string $key [, callback $cache_cb [, float &$cas_token ]] )
//检索在所有服务器上的元素
public array Memcached::getAllKeys ( void )
//检索多个元素
public mixed Memcached::getMulti ( array $keys [, array &$cas_tokens [, int $flags ]] ) //如果提供了参数cas_tokens,对于检索到的元素会为其添加CAS标记值。
//从特定服务器检索多个元素
public array Memcached::getMultiByKey ( string $server_key , array $keys [, string &$cas_tokens [, int $flags ]] )

⑨、getDelayed、getDelayedByKey、fetch、fetchAll

//请求多个元素:向Memcached服务端发出一个检索keys指定的多个 key对应元素的请求。这个方法不会等待响应而是立即返回。
//当你需要收集元素值时, 调用Memcached::fetch()或 Memcached::fetchAll()。如果with_cas设置为true,会同时请求每个元素的CAS标记。
public bool Memcached::getDelayed ( array $keys [, bool $with_cas [, callback $value_cb ]] )
//从指定的服务器上请求多个元素
public bool Memcached::getDelayedByKey ( string $server_key , array $keys [, bool $with_cas [, callback $value_cb ]] )
//抓取下一个结果
public array Memcached::fetch ( void )
//抓取所有剩余的结果
public array Memcached::fetchAll ( void )
<?php
$m = new Memcached();
$m->addServer("localhost", 11211);

$m->set("int", 99);
$m->set("string", "a simple string");
$m->set("array", array(11, 12));

$m->getDelayed(array("int", "array"), true);
var_dump($m->fetchAll());
<?php
$m = new Memcached();
$m->addServer("localhost", 11211);

$m->set("int", 99);
$m->set("string", "a simple string");
$m->set("array", array(11, 12));

//延迟的获取int和array这两个key的值
$m->getDelayed(array("int", "array"), true);
//循环抓取上面的延迟抓取得到的结果
while ($result = $m->fetch()) {
    var_dump($result);
}

⑩、set、setByKey、setMulti、setMultiByKey、touch、touchByKey、

//存储一个元素
public bool Memcached::set ( string $key , mixed $value [, int $expiration ] ) //值可以是任何有效的非资源型php类型, 因为资源类型不能被序列化存储。如果Memcached::OPT_COMPRESSION 选项开启, 序列化的值同样会被压缩存储。
//在指定服务器上存储一个元素
public bool Memcached::setByKey ( string $server_key , string $key , mixed $value [, int $expiration ] )
//存储多个元素
public bool Memcached::setMulti ( array $items [, int $expiration ] )
//在指定服务器上存储多个元素
public bool Memcached::setMultiByKey ( string $server_key , array $items [, int $expiration ] )
//设置元素的到期时间
public bool Memcached::touch ( string $key , int $expiration )
//在指定服务器上设置元素的到期时间
public bool Memcached::touchByKey ( string $server_key , string $key , int $expiration )
<?php
$m = new Memcached();
$m->addServer("localhost", 11211);

$m->set("int", 99);
$m->set("string", "a simple string");
$m->set("array", array(11, 12));
/* "object"这个key将在5分钟后过期 */
$m->set("object", new stdclass, time() + 300);
<?php
$m = new Memcached();
$m->addServer("localhost", 11211);

$items = array(
    "key1" => "value1",
    "key2" => "value2",
    "key3" => "value3"
);
$m->setMulti($items, time() + 300);

⑪、getResultCode、getResultMessage

//返回最后一次操作的结果代码
public int Memcached::getResultCode ( void )
//返回最后一次操作的结果描述消息
public string Memcached::getResultMessage ( void )
<?php
$m = new Memcached();
$m->addServer("localhost", 11211);

$m->add("foo", "bar");
if ($m->getResultCode() == Memcached::RES_NOTSTORED) {
   
}

⑫、setOption、setOptions、getOption

//设置一个memcached选项
public bool Memcached::setOption ( int $option , mixed $value )
//批量设置memcached选项
public bool Memcached::setOptions ( array $options )
//获取Memcached的选项值
public mixed Memcached::getOption ( int $option )
<?php
$m = new Memcached();
var_dump($m->getOption(Memcached::OPT_HASH) == Memcached::HASH_DEFAULT);
$m->setOption(Memcached::OPT_HASH, Memcached::HASH_MURMUR);
$m->setOption(Memcached::OPT_PREFIX_KEY, "widgets");
echo "Prefix key is now: ", $m->getOption(Memcached::OPT_PREFIX_KEY), "\n";
<?php
$m = new Memcached();
var_dump($m->getOption(Memcached::OPT_HASH) == Memcached::HASH_DEFAULT);

$m->setOptions(array(Memcached::OPT_HASH => Memcached::HASH_MURMUR, Memcached::OPT_PREFIX_KEY => "widgets"));

var_dump($m->getOption(Memcached::OPT_HASH) == Memcached::HASH_DEFAULT);
echo "Prefix key is now: ", $m->getOption(Memcached::OPT_PREFIX_KEY), "\n";

⑬、flush、quit、isPristine、isPersistent、getStats、getVersion

//作废缓存中的所有元素
public bool Memcached::flush ([ int $delay = 0 ] )
//关闭所有打开的链接
public bool Memcached::quit ( void )
//检查实例是否已创建
public bool Memcached::isPristine ( void )
//检查实例是否正在使用
public bool Memcached::isPersistent ( void )
//获取服务器池的统计信息
public array Memcached::getStats ( void )
//获取服务器池中所有服务器的版本信息
public array Memcached::getVersion ( void )



暂时还没有评论,快来抢沙发吧~

发表评论

您需要登录后才可以评论。登录 | 立即注册
阅读 69