码迷,mamicode.com
首页 > 系统相关 > 详细

memcached 1.4(未完待补)

时间:2015-07-07 16:26:21      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:

一、memcached 介绍
1.1 memcached 的使用场景
1.2 memcached 的特点
1.3 memcached 的工作流程
二、安装memcached并启动
2.1 安装 memcached
2.2 启动memcached
三、测试memcached
3.1 通过nc写入,获取,删除
3.2 通过telnet 写入,获取,删除
3.3 libmemcached工具(memcached的管理工具)
四、lnmp环境安装memcache
五、基于GUI管理memcached

一、memcached 介绍

memcached 是一个高性能、分布式的内存对象缓存系统。应用于加速动态web应用程序,减轻数据库负载。

1.1 memcached 的使用场景

  • 数据库前端的内存缓存
  • 集群中的session共享存储

1.2 memcached 的特点

  • 缓存,加速,非持久
  • 基于内存实现kv(key value)存储的服务器程序
  • 仅提供缓存,旁挂式
  • 多台memcached之间互不通行
  • 基于libevent的事件处理,epoll功能
  • Slab Allocator的机制分配、管理内存;传统的为malloc和free来分配回收,容易产生内存碎片
  • Memory for an item is not actively reclaimed。如果存储项过期(不能被访问),不是被LRU算法清理,就是被重新使用

1.3 memcached 的工作流程


技术分享
如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序明确实现)

二、安装memcached并启动

基础环境:

2.1 安装 memcached

yum install libevent-devel libevent -y
tar xf memcached-1.4.24.tar.gz
cd memcached-1.4.24
./configure
echo $?
make && make install

2.2 启动memcached

memcached 的相关启动参数:memcached -h
  • -p:指定memcahed服务监听TCP端口。默认11211
  • -m:指定memched服务可以缓存数据的最大内存。默认为64M
  • -u:运行memcahed的用户
  • -d:以守护进行方式运行
  • -c:最大的并发连接数,默认是1024
  • -vv:以very vrebose模式启动,调试信息和错误输出控制台
  • -P:设置保存memcached的pid文件位置
  • -l:指定监听的服务器IP地址
  1. [root@memcached ~]# memcached -vv -u memcached    ==>部分截图
  2. slab class   1: chunk size        96 perslab   10922
  3. slab class   2: chunk size       120 perslab    8738
  4. slab class   3: chunk size       152 perslab    6898
  5. slab class   4: chunk size       192 perslab    5461
根据以上的出内存被分为42个slab class,每个chunk  size的大小都不同(Slab Allocator的机制分配、管理内存),当要存储100k的数据时它会存储到slab class   2上这样会浪费20k,回收的话是120K一起回收的,所以就不会产生内存碎片

启动memcached
  1. [root@memcached ~]# /usr/local/bin/memcached -d -u root

  2. [root@memcached ~]# ss -tnl
  3. State       Recv-Q Send-Q                   Local Address:Port                     Peer Address:Port 
  4. LISTEN      0      128                                 :::58888                              :::*     
  5. LISTEN      0      128                                  *:58888                               *:*     
  6. LISTEN      0      1024                                :::11211                              :::*     
  7. LISTEN      0      1024                                 *:11211                               *:* 

查看运行配置
  1. [root@memcached ~]# yum install nc

  2. [root@memcached ~]# echo "stats settings" | nc localhost 11211
  3. STAT maxbytes 67108864
  4. STAT maxconns 1024
  5. STAT tcpport 11211
  6. STAT udpport 11211
  7. STAT inter NULL
  8. STAT verbosity 0
  9. STAT oldest 0
  10. STAT evictions on
  11. STAT domain_socket NULL
  12. STAT umask 700
  13. STAT growth_factor 1.25
  14. STAT chunk_size 48
  15. STAT num_threads 4
  16. STAT num_threads_per_udp 4
  17. STAT stat_key_prefix :
  18. STAT detail_enabled no
  19. STAT reqs_per_event 20
  20. STAT cas_enabled yes
  21. STAT tcp_backlog 1024
  22. STAT binding_protocol auto-negotiate
  23. STAT auth_enabled_sasl no
  24. STAT item_size_max 1048576
  25. STAT maxconns_fast no
  26. STAT hashpower_init 0
  27. STAT slab_reassign no
  28. STAT slab_automove 0
  29. STAT lru_crawler no
  30. STAT lru_crawler_sleep 100
  31. STAT lru_crawler_tocrawl 0
  32. STAT tail_repair_time 0
  33. STAT flush_enabled yes
  34. STAT hash_algorithm jenkins
  35. STAT lru_maintainer_thread no
  36. STAT hot_lru_pct 32
  37. STAT warm_lru_pct 32
  38. STAT expirezero_does_not_evict no
  39. END

三、测试memcached

命令格式为
<command> <key> <flags> <exptime> <bytes> \r\n
  • <command>:如set,add,replace等命令
  • <key>:客户端所要求存储的数据的键值
  • <flags>:在取回内容时,与数据和发送块一同保存服务器上的任意16位无符号整形(用十进制来书写)。客户端可以用它作为“位域”来存储一些特定的信息;它对服务器是不透明的。
  • <exptime> :终止时间。如果是0,该项永不过期。如果非0,到达终止时间后,客户端无法再获得这项内容
  • <bytes> :是随后的数据去块的字节长度

3.1 通过nc写入,获取,删除

  1. [root@memcached ~]#  printf "set mykey01 0 0 10\r\n1234567891\r\n"|nc 127.0.0.1 11211    ==>命令的字节是10。否则添加不成功
  2. STORED
  3. [root@memcached ~]# printf "get mykey01\r\n"|nc 127.0.0.1 11211
  4. VALUE mykey01 0 10
  5. 1234567891
  6. END
  7. [root@memcached ~]# printf "delete mykey01\r\n"|nc 127.0.0.1 11211
  8. DELETED
  9. [root@memcached ~]# printf "get mykey\r\n"|nc 127.0.0.1 11211
  10. END

3.2 通过telnet 写入,获取,删除

  1. [root@memcached ~]# telnet localhost 11211
  2. Trying ::1...
  3. Connected to localhost.
  4. Escape character is ‘^]‘.
  5. set mykey 0 600 11
  6. hello world
  7. STORED
  8. get mykey
  9. VALUE mykey 0 11
  10. hello world
  11. END
  12. delete mykey
  13. DELETED
  14. get mykey
  15. END
  16. stats
  17. STAT pid 4834
  18. STAT uptime 871
  19. STAT time 1436249757
  20. STAT version 1.4.24
  21. STAT libevent 1.4.13-stable
  22. STAT pointer_size 64
  23. STAT rusage_user 0.036994
  24. STAT rusage_system 0.119981
  25. STAT curr_connections 10
  26. STAT total_connections 37
  27. STAT connection_structures 11
  28. STAT reserved_fds 20
  29. STAT cmd_get 10
  30. STAT cmd_set 4
  31. STAT cmd_flush 0
  32. STAT cmd_touch 0
  33. STAT get_hits 4 ==>命中数量STAT get_misses 2 丢失数量
  34. STAT get_misses 6
  35. STAT delete_misses 0
  36. STAT delete_hits 3
  37. STAT incr_misses 0
  38. STAT incr_hits 0
  39. STAT decr_misses 0
  40. STAT decr_hits 0
  41. STAT cas_misses 0
  42. STAT cas_hits 0
  43. STAT cas_badval 0
  44. STAT touch_hits 0
  45. STAT touch_misses 0
  46. STAT auth_cmds 0
  47. STAT auth_errors 0
  48. STAT bytes_read 622
  49. STAT bytes_written 1091
  50. STAT limit_maxbytes 67108864
  51. STAT accepting_conns 1
  52. STAT listen_disabled_num 0
  53. STAT threads 4
  54. STAT conn_yields 0
  55. STAT hash_power_level 16
  56. STAT hash_bytes 524288
  57. STAT hash_is_expanding 0
  58. STAT malloc_fails 0
  59. STAT bytes 0
  60. STAT curr_items 0 ==>当前数据库中的条目STAT total_items 2 总共多少条数据
  61. STAT total_items 4
  62. STAT expired_unfetched 0
  63. STAT evicted_unfetched 0
  64. STAT evictions 0
  65. STAT reclaimed 0
  66. STAT crawler_reclaimed 0
  67. STAT crawler_items_checked 0
  68. STAT lrutail_reflocked 0
  69. END

3.3 libmemcached工具(memcached的管理工具)

  1. yum install libmemcached -y
  2. [root@memcached ~]# printf "set mykey01 0 0 10\r\n1234567891\r\n"|nc 127.0.0.1 11211
  3. STORED
  4. [root@memcached ~]# memcat --server=127.0.0.1:11211 mykey01
  5. 1234567891
  6. [root@memcached ~]# memstat --server=127.0.0.1:11211
  7. Listing 1 Server
  8.  
  9. Server: 127.0.0.1 (11211)
  10.      pid: 4834
  11.      uptime: 1350
  12.      time: 1436250236
  13.      version: 1.4.24
  14.      pointer_size: 64
  15.      rusage_user: 0.71989
  16.      rusage_system: 0.174973
  17.      curr_items: 1
  18.      total_items: 5
  19.      bytes: 83
  20.      curr_connections: 10
  21.      total_connections: 42
  22.      connection_structures: 11
  23.      cmd_get: 13
  24.      cmd_set: 5
  25.      get_hits: 5
  26.      get_misses: 8
  27.      evictions: 0
  28.      bytes_read: 83
  29.      bytes_written: 83
  30.      limit_maxbytes: 67108864
  31.      threads: 4

四、lnmp环境安装memcache

  1. # 4.1 编译php连接memcached的驱动是要用到gcc和zlib-devel
  2. yum install nginx php-fpm gcc zlib-devel -y  

  3. # 4.2 修改配置文件nginx-1.0.15-11.el6.x86_6
  4. cat >  /etc/nginx/conf.d/default.conf << EOF
  5. server {
  6.     listen       80 default_server;
  7.     server_name  _;
  8.     include /etc/nginx/default.d/*.conf;
  9.     location / {
  10.         root   /usr/share/nginx/html;
  11.         index  index.php index.html index.htm;
  12.     }
  13.     error_page  404              /404.html;
  14.     location = /404.html {
  15.         root   /usr/share/nginx/html;
  16.     }
  17.     error_page   500 502 503 504  /50x.html;
  18.     location = /50x.html {
  19.         root   /usr/share/nginx/html;
  20.     }
  21.     location ~ \.php$ {
  22.         root           html;
  23.         fastcgi_pass   127.0.0.1:9000;
  24.         fastcgi_index  index.php;
  25.         fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html\$fastcgi_script_name;
  26.         include        fastcgi_params;
  27.     }
  28. }
  29. EOF

  30. # 4.3 添加测试文件
  31. cat > /usr/share/nginx/html/index.php << EOF
  32. <?php
  33.     phpinfo();
  34. ?>
  35. EOF
  36.  
  37. # 4.4 重新加载nginx服务
  38. /etc/init.d/nginx reload

# 4.5 能访问能出先以下网页,但是里面的扩展找不到memcache
技术分享

  1. # 4.6 下载php的扩展插件memcache
  2. wget http://pecl.php.net/get/memcache-2.2.7.tgz
  3. gzip -d memcache-2.2.7.tgz 
  4. tar -xf memcache-2.2.7.tar
  5. cp -r memcache-2.2.7 /usr/local/
  6. ln -sv /usr/local/memcache-2.2.7/ /usr/local/memcache
  7. # 4.7 编译memcache生成php的模块
  8. yum install php-devel  
  9. cd /usr/local/memcache
  10. phpize 
  11. ./configure 
  12. make && make install
  13. # 4.8 将模块路径添加入php配置文件
  14. cat >> /etc/php.ini << EOF
  15. ;start  by test 20150707
  16. extension = /usr/lib64/php/modules/memcache.so
  17. ;end by test  20150707
  18. EOF

  19. # 4.9 重新加载 nginx 和 php-fpm
  20. /etc/init.d/php-fpm reload
  21. /etc/init.d/nginx reload

# 4.10 再次访问,能看到memcahce的模块
技术分享

五、基于GUI管理memcached

  1. # 5.1 安装phpMemcachedAdmin
  2. yum install phpMemcachedAdmin
  3. # 5.2 通过查询的到index.php的路径
  4. rpm -ql phpMemcachedAdmin
  5. /usr/share/phpMemcachedAdmin/index.php

  6. # 5.3 修改nginx配置文件
  7. cat >  /etc/nginx/conf.d/default.conf << EOF
  8. server {
  9.     listen       80 default_server;
  10.     server_name  _;
  11.     include /etc/nginx/default.d/*.conf;
  12.     location / {
  13.         #root   /usr/share/nginx/html;
  14.     root   /usr/share/phpMemcachedAdmin;
  15.         index  index.php index.html index.htm;
  16.     }
  17.     error_page  404              /404.html;
  18.     location = /404.html {
  19.         root   /usr/share/nginx/html;
  20.     }
  21.     error_page   500 502 503 504  /50x.html;
  22.     location = /50x.html {
  23.         root   /usr/share/nginx/html;
  24.     }
  25.     location ~ \.php$ {
  26.         root           html;
  27.         fastcgi_pass   127.0.0.1:9000;
  28.         fastcgi_index  index.php;
  29.         #fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
  30.     fastcgi_param  SCRIPT_FILENAME  /usr/share/phpMemcachedAdmin\$fastcgi_script_name;
  31.         include        fastcgi_params;
  32.     }
  33. }
  34. EOF
  35. # 5.4 重启nginx
  36. /etc/init.d/nginx restart

# 5.5 测试
技术分享

六、对memcached的监控



参考文章:

memcached 1.4(未完待补)

标签:

原文地址:http://www.cnblogs.com/kwstars/p/4627244.html

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