关于memcache那些事

memcached.高性能,高并发的分布式内存对象缓存系统,纯内存的缓存系统,效率极高,memcached主要目的,通过自身内存缓存关系型数据库的查询结果,减少数据库自身被访问的次数,以提高动态web应用的速度,网站架构的并发能力和扩展性

memcached可缓存用户重复的请求的动态内容(如:文字。session等);数据调用,API调用或页面引用结果的直接数据,如字符串,对象等。
http://www.memcached.org/


1,通常在一个memcached场景中,对于不会经常变动的数据放在memcached中,“数据预热”!也可以做成分类数据静态化文件,并且可以通过web缓存或者CND加速
2,热点数据缓存,对于一些更新频繁的数据也会(人为或者预热)写入到memcached

memcached特性:
1,memcached通过telnet/nc等命令可直接操作memcached数据,并且memcached协议基于文本格式,和二进制格式
2,支持epoll/kqueue异步io模型,使用libevent作为事件处理通知机制
3,key/value键值数据类型
4,全内存缓存,速度高,速率快,无持久化存储,当冲击则丢失,如果希望数据保留则可以使用redis,或者memecachedb

Memcached是一款开发工具,它既不是一个代码加速器,也不是数据库中间件。其设计哲学思想主要反映在如下方面:

  1. 简单key/value存储:服务器不关心数据本身的意义及结构,只要是可序列化数据即可。存储项由“键、过期时间、可选的标志及数据”四个部分组成;
  2. 功能的实现一半依赖于客户端,一半基于服务器端:客户负责发送存储项至服务器端、从服务端获取数据以及无法连接至服务器时采用相应的动作;服务端负责接收、存储数据,并负责数据项的超时过期;
  3. 各服务器间彼此无视:不在服务器间进行数据同步;
  4. O(1)的执行效率
  5. 清理超期数据:默认情况下,Memcached是一个LRU缓存,同时,它按事先预订的时长清理超期数据;但事实上,memcached不会删除任何已缓存数据,只是在其过期之后不再为客户所见;而且,memcached也不会真正按期限清理缓存,而仅是当get命令到达时检查其时长;
    key-value,键值缓存

键值:查找标准和对应值,键hash编码存放,和key的每一个字段的key做比较,比较过程在不出现码冲突,键冲突的情况下,查找时间无论键的hash个数,只要没出现冲突,则时间一样。

yum安装:yum install libevent libevent-devel nc telnet memcached -y

[root@NFS-WEB2 ~]# which memcached
/usr/bin/memcached

[root@NFS-WEB2 ~]# memcached -m 16m -p 11211 -d -uroot -c 8192
[root@NFS-WEB2 ~]# lsof -i :11211
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
memcached 3159 root   26u  IPv4  25986      0t0  TCP *:memcache (LISTEN)
memcached 3159 root   27u  IPv6  25987      0t0  TCP *:memcache (LISTEN)
memcached 3159 root   28u  IPv4  25990      0t0  UDP *:memcache 
memcached 3159 root   29u  IPv6  25991      0t0  UDP *:memcache 
[root@NFS-WEB2 ~]# 

多实例启动

[root@NFS-WEB2 ~]# memcached -m 16m -p 11212 -d -uroot -c 8192
[root@NFS-WEB2 ~]# lsof -i :11212
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
memcached 3186 root   26u  IPv4  27205      0t0  TCP *:11212 (LISTEN)
memcached 3186 root   27u  IPv6  27206      0t0  TCP *:11212 (LISTEN)
memcached 3186 root   28u  IPv4  27209      0t0  UDP *:11212 
memcached 3186 root   29u  IPv6  27210      0t0  UDP *:11212 
[root@NFS-WEB2 ~]# 

memcached -h相关参数:
存储类命令:set(设置缓存), add(新增), replace(替换), append(在一个缓存后附加新的内容), prepend(在缓存内容之前)
获取数据类命令:get(查看), delete(删除), incr/decr
统计类命令:stats, stats items, stats slabs, stats sizes
清理命令: flush_all

进程与连接的设置:
-d: 守护进程方式允许
-u: 指定用户
-l: 指定进程监控服务器iP
-p: 监控tcp端口号默认11211
-P(大写):设置保存的pid文件
内存相关:
-m:指定memcached服务科缓存的最大内存,默认64M
-M: memcached服务内存不够时禁用LRU,如果内存满了会报错
-n:为key+value_flags分配的最小内存空间,默认48字节
-f :设定Slab Allocator定义预先分配内存空间大小固定的块时使用的增长因子;
-L:启用打内存页,可以降低内存消耗, 改进性能
并发连接:
-c:最大并发连接,默认1024
-t: 线程数,默认4,由于memcached采用NIO,线程太多用处不大
-R:每个event最大请求数,默认20
-C:禁用CAS,可以禁止版本计数,减少开销
-S: 启用sasl进行用户认证;
调试参数:
-v: 打印较少的errors/warnings
-vv: 打印非常多调试信息和错误输出到控制台,也打印客户端命令和响应
-vvv: 打印极多的调试信息和错误输出,打印内部状态转变

[root@NFS-WEB2 ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.

插入

set user01 0 0 7 
linuxea
STORED

查看

get user01
VALUE user01 0 7
linuxea
END

删除

delete user01
DELETED
get user01
END

当有多实例时在使用:

memcached -m 16m -p 11211 -d -uroot -c 8192 -P /var/run/11211.pid

killcat /var/run/11211.pid即可

查看

[root@NFS-WEB2 memcache-2.2.7]# memcached -u root -vv
slab class   1: chunk size        96 perslab   10922
slab class   2: chunk size       120 perslab    8738
slab class   3: chunk size       152 perslab    6898
slab class   4: chunk size       192 perslab    5461
slab class   5: chunk size       240 perslab    4369
slab class   6: chunk size       304 perslab    3449
slab class   7: chunk size       384 perslab    2730
slab class   8: chunk size       480 perslab    2184
slab class   9: chunk size       600 perslab    1747
slab class  10: chunk size       752 perslab    1394
slab class  11: chunk size       944 perslab    1110
slab class  12: chunk size      1184 perslab     885
slab class  13: chunk size      1480 perslab     708
slab class  14: chunk size      1856 perslab     564
slab class  15: chunk size      2320 perslab     451
slab class  16: chunk size      2904 perslab     361
slab class  17: chunk size      3632 perslab     288
slab class  18: chunk size      4544 perslab     230
slab class  19: chunk size      5680 perslab     184
slab class  20: chunk size      7104 perslab     147
slab class  21: chunk size      8880 perslab     118
slab class  22: chunk size     11104 perslab      94
slab class  23: chunk size     13880 perslab      75
slab class  24: chunk size     17352 perslab      60
slab class  25: chunk size     21696 perslab      48
slab class  26: chunk size     27120 perslab      38
slab class  27: chunk size     33904 perslab      30
slab class  28: chunk size     42384 perslab      24
slab class  29: chunk size     52984 perslab      19
slab class  30: chunk size     66232 perslab      15
slab class  31: chunk size     82792 perslab      12
slab class  32: chunk size    103496 perslab      10
slab class  33: chunk size    129376 perslab       8
slab class  34: chunk size    161720 perslab       6
slab class  35: chunk size    202152 perslab       5
slab class  36: chunk size    252696 perslab       4
slab class  37: chunk size    315872 perslab       3
slab class  38: chunk size    394840 perslab       2
slab class  39: chunk size    493552 perslab       2
slab class  40: chunk size    616944 perslab       1
slab class  41: chunk size    771184 perslab       1
slab class  42: chunk size   1048576 perslab       1
<26 server listening (auto-negotiate)
<27 server listening (auto-negotiate)
<28 send buffer was 124928, now 268435456
<29 send buffer was 124928, now 268435456
<28 server listening (udp)
<29 server listening (udp)
<28 server listening (udp)
<29 server listening (udp)
<28 server listening (udp)
<29 server listening (udp)
<28 server listening (udp)
<29 server listening (udp)

指定1.1的增长因子

[root@NFS-WEB2 memcache-2.2.7]# memcached -u root -f 1.1 -vv
slab class   1: chunk size        96 perslab   10922
slab class   2: chunk size       112 perslab    9362
slab class   3: chunk size       128 perslab    8192
slab class   4: chunk size       144 perslab    7281
slab class   5: chunk size       160 perslab    6553
slab class   6: chunk size       176 perslab    5957
slab class   7: chunk size       200 perslab    5242
slab class   8: chunk size       224 perslab    4681

php插件

http://pecl.php.net/package/memcache
wget http://pecl.php.net/get/memcache-2.2.7.tgz
tar xf memcache-2.2.7.tgz
cd memcached-2.2.7
[root@NFS-WEB2 memcache-2.2.7]# /usr/local/php5.3/bin/phpize 
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
[root@NFS-WEB2 memcache-2.2.7]# . /configure --enable-memcache --with-php-config=/usr/local/php5.3/bin/php-config
[root@NFS-WEB2 memcache-2.2.7]#  make
[root@NFS-WEB2 memcache-2.2.7]# make install
Installing shared extensions:     /usr/local/php5.3/lib/php/extensions/no-debug-non-zts-20090626/

编辑/usr/local/php/lib/php.ini,在“动态模块”相关的位置添加如下一行来载入memcache扩展:

[root@NFS-WEB2 memcache-2.2.7]# vim /etc/php.ini
extension = /usr/local/php5.3/lib/php/extensions/no-debug-non-zts-20090626/memcache.so
[root@NFS-WEB2 php5.3]# /usr/local/php5.3/sbin/php-fpm 


而后对memcached功能进行测试,在网站目录中建立测试页面test.php,添加如下内容:

connect("127.0.0.1", 11211) or die("Could not connect");

$version = $mem->getVersion();
echo "Server's version: ".$version."
\n";

$mem->set('hellokey', 'Hello World', 0, 600) or die("Failed to save data at the memcached server");
echo "Store data in the cache (data will expire in 600 seconds)
\n";

$get_result = $mem->get('hellokey');
echo "$get_result is from memcached server.";
?>

phpMemcachedAdmin

[root@NFS-WEB2 share]# yum -y install phpMemcachedAdmin
[root@NFS-WEB2 share]# cp -R phpMemcachedAdmin/ /www/www/pma


状态参数:
curr_items 当前缓存条个数
total_items 总的缓存条目
total_connections 总的连接数
curr_connections 当前的连接数
connection_struouures 总的连接个数
cmd_get 总的get次数
get_hits get命中次数
get_misses get未命中次数
incr_hits 自动加1命中次数
incr_misses 自动加1未命中次数
bytes_read 用户发来的字节数
bytes_written 总发送客户端响应的字节数
limit_maxbytes memcache内存的总的字节大小
threads 线程数
evictions 未获取空闲内存删除的items数

memcache-master
[root@NFS-WEB2 www]# unzip memadmin-master.zip

memcachephp

工具下载地址:点我下载

2 分享

您可以选择一种方式赞助本站

支付宝扫码赞助

支付宝扫码赞助

日期: 2016-01-31分类: Web

标签: memcached

发表评论