Memcached 的安装和配置详解

作者: print("") 分类: linux 发布时间: 2017-07-06 15:52

Memcached 的安装和配置详解

安装libevent
tar zxf libevent-1.4.12-stable.tar.gz
cd libevent-1.4.12-stable
./configure –prefix=/usr/local/libevent
make && make install
cd..
安装memcached
tar zxf memcached-1.4.7.tar.gz
cd memcached-1.4.7
./configure –prefix=/usr/local/memcached-1.4.7 \
–with-libevent=/usr/local/libevent
make && make install
cd..
配置环境变量
ln -s /usr/local/memcached-1.4.7 /usr/local/memcached
echo “export PATH=$PATH:/usr/local/memcached/bin” >>/etc/profile
source /etc/profile
 
启动memcached
memcached -m 32m -p 11211 -d -u root -P /var/run/memcached.pid -c 8192
 
 
cat >>/etc/rc.local<<
memcached -m 32m -p 11211 -d -u root -P /var/run/memcached.pid -c 8192
memcached -m 32m -p 11212 -d -u root -P /var/run/memcached.pid -c 8192
EOF
 
-m 最大内存大小、默认是64M
-p 使用的TCP端口、默认是11211
-d 作为守护进程在后台运行
-u 运行memcached的用户。默认不能由root用户启动、所以当前用户为root用户时、需要利用-u来指定
-P 设置保存memcache的Pid文件
-c 最大运行的并发连接数、默认是1024 按照服务器的负载量来
-l 监控的服务IP地址、如果有多个地址的话
-vv 以very verbose 模式启动、调试信息和错误输出到控制台

Memcached 连接

语法

telnet HOST PORT
命令中的 HOSTPORT 为运行 Memcached 服务的 IP 和 端口。

实例

以下实例演示了如何连接到 Memcached 服务并执行简单的 set 和 get 命令。
本实例的 Memcached 服务运行的主机为 127.0.0.1(本机) 、端口为 11211。
telnet 127.0.0.1 11211 Trying 127.0.0.1… Connected to 127.0.0.1. Escape character is ‘^]’. set foo 0 0 3                                                   保存命令 bar                                                             数据 STORED                                                          结果 get foo                                                         取得命令 VALUE foo 0 3                                                   数据 bar                                                             数据 END                                                             结束行 quit                                                            退出

Memcached set 命令

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

语法:

set 命令的基本语法格式如下:
set key flags exptime bytes [noreply] value
参数说明如下:
1、key:键值 key-value 结构中的 key,用于查找缓存值。
2、flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。
3、exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
4、bytes:在缓存中存储的字节数
5、noreply(可选): 该参数告知服务器不需要返回数据
6、value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)

实例

以下实例中我们设置:

  • key → runoob
  • flag → 0
  • exptime → 900 (以秒为单位)
  • bytes → 9 (数据存储的字节数)
  • value → memcached

 
set runoob 0 900 9memcachedSTORED get runoobVALUE runoob 0 9memcached END

输出

如果数据设置成功,则输出:
STORED
输出信息说明:

  • STORED:保存成功后输出。
  • ERROR:在保持失败后输出。

 

Memcached add 命令

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

语法:

add 命令的基本语法格式如下:
add key flags exptime bytes [noreply]value
参数说明如下:

  • key键值 key-value 结构中的 key,用于查找缓存值。
  • flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。
  • exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
  • bytes:在缓存中存储的字节数
  • noreply(可选): 该参数告知服务器不需要返回数据
  • value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)

实例

以下实例中我们设置:

  • key → new_key
  • flag → 0
  • exptime → 900 (以秒为单位)
  • bytes → 10 (数据存储的字节数)
  • value → data_value

add new_key 0 900 10data_valueSTOREDget new_keyVALUE new_key 0 10data_valueEND

输出

如果数据添加成功,则输出:
STORED
输出信息说明:

  • STORED:保存成功后输出。
  • NOT_STORED:在保持失败后输出。

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

语法:

replace 命令的基本语法格式如下:
replace key flags exptime bytes [noreply]value
参数说明如下:

  • key键值 key-value 结构中的 key,用于查找缓存值。
  • flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。
  • exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
  • bytes:在缓存中存储的字节数
  • noreply(可选): 该参数告知服务器不需要返回数据
  • value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)

实例

以下实例中我们设置:

  • key → mykey
  • flag → 0
  • exptime → 900 (以秒为单位)
  • bytes → 10 (数据存储的字节数)
  • value → data_value

以下实例中我们使用的键位 ‘mykey’ 并存储对应的值 data_value。执行后我们替换相同的 key 的值为 ‘some_other_value’。
add mykey 0 900 10data_valueSTOREDget mykeyVALUE mykey 0 10data_valueENDreplace mykey 0 900 16some_other_valueget mykeyVALUE mykey 0 16some_other_valueEND

输出

如果数据添加成功,则输出:
STORED
输出信息说明:

  • STORED:保存成功后输出。
  • NOT_STORED:执行替换失败后输出。

Memcached append 命令

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

语法:

append 命令的基本语法格式如下:
append key flags exptime bytes [noreply]value
参数说明如下:

  • key键值 key-value 结构中的 key,用于查找缓存值。
  • flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。
  • exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
  • bytes:在缓存中存储的字节数
  • noreply(可选): 该参数告知服务器不需要返回数据
  • value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)

实例

实例如下:

  • 首先我们在 Memcached 中存储一个键 runoob,其值为 memcached。
  • 然后,我们使用 get 命令检索该值。
  • 然后,我们使用append 命令在键为 runoob 的值后面追加 “redis”。
  • 最后,我们再使用 get 命令检索该值。

set runoob 0 900 9memcachedSTOREDget runoobVALUE runoob 0 9memcachedENDappend runoob 0 900 5redisSTOREDget runoobVALUE runoob 0 14memcachedredisEND

输出

如果数据添加成功,则输出:
STORED
输出信息说明:

  • STORED:保存成功后输出。
  • NOT_STORED:该键在 Memcached 上不存在。
  • CLIENT_ERROR:执行错误。

Memcached prepend 命令

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

语法:

prepend 命令的基本语法格式如下:
prepend key flags exptime bytes [noreply]value
参数说明如下:

  • key键值 key-value 结构中的 key,用于查找缓存值。
  • flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。
  • exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
  • bytes:在缓存中存储的字节数
  • noreply(可选): 该参数告知服务器不需要返回数据
  • value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)

实例

实例如下:

  • 首先我们在 Memcached 中存储一个键 runoob,其值为 memcached。
  • 然后,我们使用 get 命令检索该值。
  • 然后,我们使用prepend 命令在键为 runoob 的值后面追加 “redis”。
  • 最后,我们再使用 get 命令检索该值。

set runoob 0 900 9memcachedSTOREDget runoobVALUE runoob 0 14memcachedENDprepend runoob 0 900 5redisSTOREDget runoobVALUE runoob 0 14redismemcachedEND

输出

如果数据添加成功,则输出:
STORED
输出信息说明:

  • STORED:保存成功后输出。
  • NOT_STORED:该键在 Memcached 上不存在。
  • CLIENT_ERROR:执行错误。

Memcached CAS 命令

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

语法:

CAS 命令的基本语法格式如下:
cas key flags exptime bytes unique_cas_token [noreply]value
参数说明如下:

  • key键值 key-value 结构中的 key,用于查找缓存值。
  • flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。
  • exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
  • bytes:在缓存中存储的字节数
  • unique_cas_token通过 gets 命令获取的一个唯一的64位值。
  • noreply(可选): 该参数告知服务器不需要返回数据
  • value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)

实例

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

  • 如果没有设置唯一令牌,则 CAS 命令执行错误。
  • 如果键 key 不存在,执行失败。
  • 添加键值对。
  • 通过 gets 命令获取唯一令牌。
  • 使用 cas 命令更新数据
  • 使用 get 命令查看数据是否更新

 
cas tp 0 900 9ERROR             <− 缺少 token cas tp 0 900 9 2memcachedNOT_FOUND         <− 键 tp 不存在 set tp 0 900 9memcachedSTORED gets tpVALUE tp 0 9 1memcachedEND cas tp 0 900 5 1redisSTORED get tpVALUE tp 0 5redisEND

输出

如果数据添加成功,则输出:
STORED
输出信息说明:

  • STORED:保存成功后输出。
  • ERROR:保存出错或语法错误。
  • EXISTS:在最后一次取值后另外一个用户也在更新该数据。
  • NOT_FOUND:Memcached 服务上不存在该键值。

 
 
 

Memcached get 命令

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

语法:

get 命令的基本语法格式如下:
get key
多个 key 使用空格隔开,如下:
get key1 key2 key3
参数说明如下:

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

实例

在以下实例中,我们使用 runoob 作为 key,过期时间设置为 900 秒。
set runoob 0 900 9memcachedSTOREDget runoobVALUE runoob 0 9memcachedEND
 

Memcached gets 命令

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

语法:

gets 命令的基本语法格式如下:
gets key
多个 key 使用空格隔开,如下:
gets key1 key2 key3
参数说明如下:

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

实例

在以下实例中,我们使用 runoob 作为 key,过期时间设置为 900 秒。
set runoob 0 900 9memcachedSTOREDgets runoobVALUE runoob 0 9 1memcachedEND
在 使用 gets 命令的输出结果中,在最后一列的数字 1 代表了 key 为 runoob 的 CAS 令牌。
 

Memcached delete 命令

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

语法:

delete 命令的基本语法格式如下:
delete key [noreply]
参数说明如下:

  • key键值 key-value 结构中的 key,用于查找缓存值。
  • noreply(可选): 该参数告知服务器不需要返回数据

实例

在以下实例中,我们使用 runoob 作为 key,过期时间设置为 900 秒。之后我们使用 delete 命令删除该 key。
set runoob 0 900 9memcachedSTOREDget runoobVALUE runoob 0 9memcachedENDdelete runoobDELETEDget runoobENDdelete runoobNOT_FOUND

输出

输出信息说明:

  • DELETED:删除成功。
  • ERROR:语法错误或删除失败。
  • NOT_FOUND:key 不存在。

Memcached incr 与 decr 命令

Memcached incr 与 decr 命令用于对已存在的 key(键) 的数字值进行自增或自减操作。
incr 与 decr 命令操作的数据必须是十进制的32位无符号整数。
如果 key 不存在返回 NOT_FOUND,如果键的值不为数字,则返回 CLIENT_ERROR,其他错误返回 ERROR

incr 命令

语法:

incr 命令的基本语法格式如下:
incr key increment_value
参数说明如下:

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

实例

在以下实例中,我们使用 visitors 作为 key,初始值为 10,之后进行加 5 操作。
set visitors 0 900 210STOREDget visitorsVALUE visitors 0 210ENDincr visitors 515get visitorsVALUE visitors 0 215END

输出

输出信息说明:

  • NOT_FOUND:key 不存在。
  • CLIENT_ERROR:自增值不是对象。
  • ERROR其他错误,如语法错误等。

decr 命令

decr 命令的基本语法格式如下:
decr key decrement_value
参数说明如下:

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

实例

set visitors 0 900 210STOREDget visitorsVALUE visitors 0 210ENDdecr visitors 55get visitorsVALUE visitors 0 15END
在以下实例中,我们使用 visitors 作为 key,初始值为 10,之后进行减 5 操作。

输出

输出信息说明:

  • NOT_FOUND:key 不存在。
  • CLIENT_ERROR:自增值不是对象。
  • ERROR其他错误,如语法错误等。

Memcached stats 命令

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

语法:

stats 命令的基本语法格式如下:
stats

实例

在以下实例中,我们使用了 stats 命令来输出 Memcached 服务信息。
statsSTAT pid 1162STAT uptime 5022STAT time 1415208270STAT version 1.4.14STAT libevent 2.0.19-stableSTAT pointer_size 64STAT rusage_user 0.096006STAT rusage_system 0.152009STAT curr_connections 5STAT total_connections 6STAT connection_structures 6STAT reserved_fds 20STAT cmd_get 6STAT cmd_set 4STAT cmd_flush 0STAT cmd_touch 0STAT get_hits 4STAT get_misses 2STAT delete_misses 1STAT delete_hits 1STAT incr_misses 2STAT incr_hits 1STAT decr_misses 0STAT decr_hits 1STAT cas_misses 0STAT cas_hits 0STAT cas_badval 0STAT touch_hits 0STAT touch_misses 0STAT auth_cmds 0STAT auth_errors 0STAT bytes_read 262STAT bytes_written 313STAT limit_maxbytes 67108864STAT accepting_conns 1STAT listen_disabled_num 0STAT threads 4STAT conn_yields 0STAT hash_power_level 16STAT hash_bytes 524288STAT hash_is_expanding 0STAT expired_unfetched 1STAT evicted_unfetched 0STAT bytes 142STAT curr_items 2STAT total_items 6STAT evictions 0STAT reclaimed 1END
这里显示了很多状态信息,下边详细解释每个状态项:

  • 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:已过期的数据条目来存储新数据的数目

Memcached stats items 命令

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

语法:

stats items 命令的基本语法格式如下:
stats items

实例

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

Memcached stats slabs 命令

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

语法:

stats slabs 命令的基本语法格式如下:
stats slabs

实例

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

Memcached stats sizes 命令

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

语法:

stats sizes 命令的基本语法格式如下:
stats sizes

实例

stats sizesSTAT 96 1END

Memcached flush_all 命令

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

语法:

flush_all 命令的基本语法格式如下:
flush_all [time] [noreply]

实例

清理缓存:
set runoob 0 900 9memcachedSTOREDget runoobVALUE runoob 0 9memcachedENDflush_allOKget runoobEND

PHP 连接 Memcached 服务

在前面章节中我们已经介绍了如何安装 Memcached 服务,接下来我们为大家介绍 PHP 如何使用 Memcached 服务。

PHP Memcache 扩展安装

我是yum 安装的php 和apache
PHP Memcache 扩展包下载地址:http://pecl.php.net/package/memcache,你可以下载最新稳定包(stable)。
wget http://pecl.php.net/get/memcache-2.2.7.tgz               tar -zxvf memcache-2.2.7.tgzcd memcache-2.2.7/usr/bin/phpize./configure –with-php-config=/usr/bin/php-configmake && make install 如果你是 PHP7 版本,则需要下载指定分支: git clone -b php7 https://github.com/php-memcached-dev/php-memcached.git 如果你的系统还未编译 libmemcached,则下载编译它:https://launchpad.net/libmemcached/+download 注意:/usr/bin 为php的安装路径,需要根据你安装的实际目录调整。
安装成功后会显示你的memcache.so扩展的位置,比如我的:
[root@Lserver-1 memcache-2.2.7]# make install
Installing shared extensions:     /usr/lib64/php/modules/
[root@Lserver-1 memcache-2.2.7]#
最后我们需要把这个扩展添加到php中,打开你的php.ini文件在最后添加以下内容:
[Memcache]extension_dir = ” /usr/lib64/php/modules/”extension = memcache.so
添加完后 重新启动php,我使用的是apache+php-fpm进程所以命令如下:
/etc/init.d/php-fpm restart
如果是apache的使用以下命令:
/etc/init.d/httpd restart
检查安装结果
/usr/bin/php -m |grep memcachememcache
安装成功会输出:memcache。
或者通过浏览器访问 phpinfo() 函数来查看,如下图:

PHP 连接 Memcached

<?php$memcache = new Memcache;             //创建一个memcache对象$memcache->connect(‘localhost’, 11211) or die (“Could not connect”); //连接Memcached服务器$memcache->set(‘key’, ‘test’);        //设置一个变量到内存中,名称是key 值是test$get_value = $memcache->get(‘key’);   //从内存中取出key的值echo $get_value;?>
查看一下结果

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注