码迷,mamicode.com
首页 > Windows程序 > 详细

Memcached 笔记与总结(1)Linux(CentOS 6.6) 和 Windows(7)下安装与配置 Memcached (1.4.24)与 Memcached 基础命令

时间:2015-08-30 12:35:17      阅读:2247      评论:0      收藏:0      [点我收藏+]

标签:

Memcached 官方网站:http://memcached.org/

当前最新版本(stable 稳定版)是 1.4.24,源码包下载地址:http://www.memcached.org/files/memcached-1.4.24.tar.gz

memcached 依赖于 libevent 库,需要先编译 libevent,下载地址:http://jaist.dl.sourceforge.net/project/levent/libevent/libevent-2.0/libevent-2.0.22-stable.tar.gz

安装过程:

libevent:

① 解压

[root@localhost src]# tar -zxvf libevent-2.0.22-stable.tar.gz 

 

② 进入目录

[root@localhost src]# cd libevent-2.0.22-stable

 

③ 配置

可以通过

[root@localhost libevent-2.0.22-stable]# ./configure -h

来查看编译选项。

 

 配置:

[root@localhost libevent-2.0.22-stable]# ./configure --prefix=/usr/local/libevent

 

 ④ 编译 && 安装

[root@localhost libevent-2.0.22-stable]# make && make install

 

 

memcached

① 解压:

[root@localhost src]# tar -zxvf memcached-1.4.24.tar.gz 

  

② 进入目录

[root@localhost src]# cd memcached-1.4.24

 

③ 配置

[root@localhost memcached-1.4.24]# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent

 

④ 编译 && 安装

[root@localhost memcached-1.4.24]# make && make install

 

 ⑤ 运行 memcached

[root@localhost local]# cd memcached/
[root@localhost memcached]# ll
总用量 12
drwxr-xr-x 2 root root 4096 8月 30 01:27 bin
drwxr-xr-x 3 root root 4096 8月 30 01:27 include
drwxr-xr-x 3 root root 4096 8月 30 01:27 share
[root@localhost memcached]# ll bin/
总用量 292
-rwxr-xr-x 1 root root 298213 8月 30 01:27 memcached
[root@localhost memcached]# ./bin/memcached -p 11211 -m 64 -vvv
cant run as root without the -u switch

出现 can‘t run as root without the -u switch 的原因是不能以 root 用户运行 memcached

 

查看当前用户:

[root@localhost memcached]# whoami
root

 

解决方案,以 nobody 身份启动 memcached:

[root@localhost memcached]# ./bin/memcached -p 11211 -m 64 -u nobody -vvv

 

可以在本地使用 telnet 连接虚拟机上的 memcached

telnet 192.168.254.100 11211

 

如果需要 memcached 在后台执行,可以使用 

[root@localhost memcached]# ./bin/memcached -p 11211 -m 64 -u nobody -d

技术分享

 

 

附:Windows(7 64位)下安装 memcached(1.4.24)及 memcached 的常用命令

下载地址:http://wendal.net/2015/04/27.html

下载解压,把主文件夹拷贝至任一目录,并且重命名为 "memcached"

 

①打开 "cmd",进入该目录:

技术分享

 

②查看 memcached 版本和帮助

D:\memcached>memcached -h

技术分享

 

③ 安装 memcached:

D:\memcached>memcached -d install

技术分享

 

④ 开启 memcached:

D:\memcached>memcached.exe -p 11211 -l 127.0.0.1 -m 64 -d start

技术分享

 

或者

如果需要把错误信息或者警告信息在服务器端输出,可以:

D:\memcached\memcached.exe -m 64 -p 11211 -vvv

技术分享

 

也就是说此时在客户端进行的操作,服务器端会显示信息:

技术分享

 

 

memcached 参数说明

-p:端口号,默认11211

-l:绑定地址 ( 默认:所有都允许,无论内外网或者本机更换 IP,有安全隐患,若设置为127.0.0.1就只能本机访问 )

-m:使用内存的大小,单位 mb

-d start:启动 memcached 服务   
-d restart:重起 memcached 服务   
-d stop|shutdown:关闭正在运行的 memcached 服务  

-c:最大同时连接数,默认是1024

-v:提示信息(在事件循环中打印错误 / 警告信息)
-vv:详细信息(还打印客户端命令 / 响应)
-vvv:超详细信息(还打印内部状态的变化)

-f:增长因子(每两个相邻 chunk 的大小比例),默认 1.25

 

⑤ 本机使用 telnet 进行客户端测试:

另外开启一个 cmd 窗口

技术分享 

使用 ctrl + ] 打开回显功能。

 

具体操作

添加一个键值存储:

技术分享

add 语法:

add key flag expire length

flag:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息(如区分保存的值是字符串,或者序列化的对象等,取值时可以做相应的处理)

expire:在缓存中保存键值对的时间长度(以秒为单位,0 表示不主动清除)

length:长度,以字节为单位

 

add 已经存在的 key 是不能成功的:

技术分享

 

获取(查询)某个键的值:get key

技术分享

 

expire 可以是秒数(n 秒后失效),也可以是时间戳(什么时间失效),例如:

10 秒后失效

技术分享

 

再例如当前时间戳是:1440774503

设置 100 秒后失效:

技术分享

 

delete 删除键值

技术分享

 

 

replace 替换值,参数和 add 一样:

技术分享 

 

replace 不能对不存在的键进行修改:

技术分享

 

set 同时具有 add 和 replace 的功能,参数和 add 一样:

技术分享

set 命令既可以修改已经存在的键的值,也可以增加不存在的键值。

 

incr key n :键 key 的值增加 n

decr key n :键 key 的值减少n

技术分享

注意:key 的值是 32 位无符号的数 

decr 应用场景:秒杀功能

下单时,有一系列的数据库操作,如写入订单、更改库存,还有事务要求,对于传统关系型数据库来说压力很大。

而秒杀的操作,是先秒抢一个订单号,余下的例如个人收货信息填写等操作可以不着急进行(可以凭借该订单号去另一个页面慢慢下订单、zhi‘fu)。发订单号的操作就可以利用 memcached 的 decr 功能:

在内存中存储一个键值对 count 用来记录库存量,秒杀 n 件,则 count 的值是 n。秒杀时,对库存进行 memcached 的 decr 操作,然后进行判断返回的值,当返回的值大于 0,就说明抢单成功。当返回的值等于 0,活动结束。

也可以使用 incr 命令(秒杀 n 件,当 incr 返回的值等于 n 时,活动结束)。

由于抢单的主要操作都是在内存中进行,因此速度很快。

 

stats :统计

技术分享

stats
STAT pid 5368  #进程号
STAT uptime 3949  #持续运行时间
STAT time 1440823276
STAT version 1.4.24
STAT libevent 2.0.22-stable
STAT pointer_size 32
STAT rusage_user 0.202000
STAT rusage_system 0.343000
STAT curr_connections 10
STAT total_connections 11
STAT connection_structures 11
STAT reserved_fds 20
STAT cmd_get 4
STAT cmd_set 3
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 3
STAT get_misses 1 # get_hits 和 get_misses 可以计算缓存命中率
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 1
STAT decr_misses 0
STAT decr_hits 2
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 151
STAT bytes_written 172
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 262144
STAT hash_is_expanding 0
STAT malloc_fails 0
STAT bytes 109
STAT curr_items 2 #当前存储的键的个数
STAT total_items 3
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT evictions 0
STAT reclaimed 0
STAT crawler_reclaimed 0
STAT crawler_items_checked 0
STAT lrutail_reflocked 0
END

 

flush_all:清除所有的键值。正在运行的系统上慎用。

技术分享

此时 stats 查看统计时,curr_items 显示当前还有存储的键值,是因为过期所采用的是惰性失效机制。

 

memcached 内存分配机制

memcached 缓解内存的碎片化采用 slab allocator 机制来管理内存:预先把内存划分成若干个 slab 仓库,每个仓库切分成不同尺寸的小块,需要存内容时判断内容的大小,根据内容的大小选择合适的仓库。 

注意:如果有 100 Byte 的数据要存储,但 122 Byte 大小的仓库中的 chunk 满了,memcached 并不会寻找更大的仓库如 144 Byte 的仓库来存储该数据,而是把 122 Byte 仓库的就数据踢掉。

 

LRU 删除机制

memcached 的过期数据删除机制:

当某个值过期后,并没有从内存中删除,因此 stats 统计时,curr_items 仍然有其信息;

当取该值的时候,判断是否过期,如果过期,返回空,并清空,此时 curr_items 就减少了;

有过之前没有 get 过,不会自动删除;

只有当某个新值占用它的位置时,当成空 chunk 来占用。

这个过期只是让用户看不到数据,并没有在过期的瞬间将其从内存中删除,称之为 lazy expriation(惰性失效机制),好处是 节省了 CPU 资源和检测的成本。

LRU:Least Recently Used 最近最少使用。不论这个最近最少使用的值是否是永久有效,当某个新值要占据它的位置时,它都会被踢掉。

 

 

参考:

http://www.2cto.com/os/201209/153833.html

http://blog.csdn.net/zzulp/article/details/7823511

Memcached 笔记与总结(1)Linux(CentOS 6.6) 和 Windows(7)下安装与配置 Memcached (1.4.24)与 Memcached 基础命令

标签:

原文地址:http://www.cnblogs.com/dee0912/p/4758925.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!