一、下载 
1.Libevent 
简单的说就是一个事件触发的网络库,Memcached离不开它。

  1. wget http://cloud.github.com/downloads/libevent/libevent/libevent-2.0.17-stable.tar.gz

2.Memcached 
今天的主角

  1. wget http://memcached.googlecode.com/files/memcached-1.4.13.tar.gz

二、安装 
1.Libevent 
解压缩

  1. tar zxvf libevent-2.0.17-stable.tar.gz

编译、安装

  1. ./configure --prefix=/usr && make && make install

这里一定要注意指定--prefix,后面配置memcached的时候就有必要用到。 
2.Memcached 
解压

  1. tar zxvf memcached-1.4.13.tar.gz

编译、安装

  1. ./configure --with-libevent=/usr/lib && make && make install

这里一定要指定libevent的路径,否则启动的时候就有找不到libevent的so文件的错误! 
启动

  1. memcached -d -m 512 -p 11211 -u root -c 256 -P /var/run/memcached.pid

参数

引用
-p <num>      TCP port number to listen on (default: 11211) 
-U <num>      UDP port number to listen on (default: 11211, 0 is off) 
-l <addr>     interface to listen on (default: INADDR_ANY, all addresses) 
              <addr> may be specified as host:port. If you don't specify 
              a port number, the value you specified with -p or -U is 
              used. You may specify multiple addresses separated by comma 
              or by using -l multiple times 
-d            run as a daemon 
-u <username> assume identity of <username> (only when run as root) 
-m <num>      max memory to use for items in megabytes (default: 64 MB) 
-M            return error on memory exhausted (rather than removing items) 
-c <num>      max simultaneous connections (default: 1024) 
-v            verbose (print errors/warnings while in event loop) 
-P <file>     save PID in <file>, only used with -d option 

要关掉memcached

  1. kill -9 `cat /var/run/memcached.pid`

是否正常?Telnet上去看看

  1. telnet xxx.xxx.xxx.xxx 11211

然后输入

  1. stats

接着就能看到:

引用
STAT pid 3021 
STAT uptime 3621 
STAT time 1331261509 
STAT version 1.4.13 
STAT libevent 2.0.17-stable 
STAT pointer_size 64 
STAT rusage_user 0.000000 
STAT rusage_system 0.000999 
STAT curr_connections 6 
STAT total_connections 7 
STAT connection_structures 7 
STAT reserved_fds 20 
STAT cmd_get 0 
STAT cmd_set 0 
STAT cmd_flush 0 
STAT cmd_touch 0 
STAT get_hits 0 
STAT get_misses 0 
STAT delete_misses 0 
STAT delete_hits 0 
STAT incr_misses 0 
STAT incr_hits 0 
STAT decr_misses 0 
STAT decr_hits 0 
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 72 
STAT bytes_written 1038 
STAT limit_maxbytes 52428800 
STAT accepting_conns 1 
STAT listen_disabled_num 0 
STAT threads 4 
STAT conn_yields 0 
STAT hash_power_level 16 
STAT hash_bytes 524288 
STAT hash_is_expanding 0 
STAT expired_unfetched 0 
STAT evicted_unfetched 0 
STAT bytes 0 
STAT curr_items 0 
STAT total_items 0 
STAT evictions 0 
STAT reclaimed 0 
END 

上面状况说明Memcached服务正常。 
还可以试试get、set、delete、replace

引用
set foo 0 0 3     (保存命令) 
bar               (数据) 
STORED            (结果) 
get foo           (取得命令) 
VALUE foo 0 3     (数据) 
bar               (数据)

输入

  1. quit

退出。

三、系统服务 
参照Nginx的系统服务,自己写了一个Memcached的系统服务脚本。 
先构建/etc/init.d/memcahed这个文件,然后赋予其可执行权限:

  1. touch /etc/init.d/memcached
  2. chmod +x /etc/init.d/memcached

memcached脚本如下:

  1. #!/bin/bash
  2. # v.0.0.1
  3. # create by snowolf at 2012.5.25
  4. #
  5. # memcached  - This shell script takes care of starting and stopping memcached.
  6. #
  7. # chkconfig: - 90 10
  8. # description: Memcache provides fast memory based storage.
  9. # processname: memcached
  10. memcached_path="/usr/local/bin/memcached"
  11. memcached_pid="/var/run/memcached.pid"
  12. memcached_memory="1024"
  13. # Source function library.
  14. . /etc/rc.d/init.d/functions
  15. [ -x $memcached_path ] || exit 0
  16. RETVAL=0
  17. prog="memcached"
  18. # Start daemons.
  19. start() {
  20. if [ -e $memcached_pid -a ! -z $memcached_pid ];then
  21. echo $prog" already running...."
  22. exit 1
  23. fi
  24. echo -n $"Starting $prog "
  25. # Single instance for all caches
  26. $memcached_path -m $memcached_memory -l 0.0.0.0 -p 11211 -u root -d -P $memcached_pid
  27. RETVAL=$?
  28. [ $RETVAL -eq 0 ] && {
  29. touch /var/lock/subsys/$prog
  30. success $"$prog"
  31. }
  32. echo
  33. return $RETVAL
  34. }
  35. # Stop daemons.
  36. stop() {
  37. echo -n $"Stopping $prog "
  38. killproc -d 10 $memcached_path
  39. echo
  40. [ $RETVAL = 0 ] && rm -f $memcached_pid /var/lock/subsys/$prog
  41. RETVAL=$?
  42. return $RETVAL
  43. }
  44. # See how we were called.
  45. case "$1" in
  46. start)
  47. start
  48. ;;
  49. stop)
  50. stop
  51. ;;
  52. status)
  53. status $prog
  54. RETVAL=$?
  55. ;;
  56. restart)
  57. stop
  58. start
  59. ;;
  60. *)
  61. echo $"Usage: $0 {start|stop|status|restart}"
  62. exit 1
  63. esac
  64. exit $RETVAL

注意这几行配置,请根据实际情况配置memcached执行文件路径,以及Memcached使用内存大小:

引用
memcached_path="/usr/local/bin/memcached" 
memcached_memory="1024"

追加为系统服务:

  1. chkconfig --add memcached
  2. chkconfig memcached on

然后就可以通过service memcached start|stop|status|restart控制memcached了!

四、常规错误 
一开始没有指定libevent路径安装memcached的时候,启动memcached就报这个错误:

引用
memcached: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory 

其实这个文件就在/usr/lib下。错就错在Linux是64bit系统,如果没有指定libevent路径,memcached就会去/usr/lib64下去找。 
找到这个文件

  1. whereis libevent-2.0.so.5
引用
libevent-2.0.so: /usr/lib/libevent-2.0.so.5
  1. ldd /usr/local/bin/memcached

提示找不到libevent-2.0.so.5

引用
        linux-vdso.so.1 =>  (0x00007fff41dfd000) 
        libevent-2.0.so.5 => not found 
        librt.so.1 => /lib64/librt.so.1 (0x0000003c94a00000) 
        libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003c93a00000) 
        libc.so.6 => /lib64/libc.so.6 (0x0000003c92e00000) 
        /lib64/ld-linux-x86-64.so.2 (0x0000003c92a00000)

定位

  1. LD_DEBUG=libs /usr/local/bin/memcached -v
引用
     19905:     find library=libevent-2.0.so.5 [0]; searching 
     19905:      search path=/usr/lib/lib/tls/x86_64:/usr/lib/lib/tls:/usr/lib/lib/x86_64:/usr/lib/lib          (RPATH from file /usr/local/bin/memcached) 
     19905:       trying file=/usr/lib/lib/tls/x86_64/libevent-2.0.so.5 
     19905:       trying file=/usr/lib/lib/tls/libevent-2.0.so.5 
     19905:       trying file=/usr/lib/lib/x86_64/libevent-2.0.so.5 
     19905:       trying file=/usr/lib/lib/libevent-2.0.so.5 
     19905:      search cache=/etc/ld.so.cache 
     19905:      search path=/lib64/tls/x86_64:/lib64/tls:/lib64/x86_64:/lib64:/usr/lib64/tls/x86_64:/usr/lib64/tls:/usr/lib64/x86_64:/usr/lib64            (system search path) 
     19905:       trying file=/lib64/tls/x86_64/libevent-2.0.so.5 
     19905:       trying file=/lib64/tls/libevent-2.0.so.5 
     19905:       trying file=/lib64/x86_64/libevent-2.0.so.5 
     19905:       trying file=/lib64/libevent-2.0.so.5 
     19905:       trying file=/usr/lib64/tls/x86_64/libevent-2.0.so.5 
     19905:       trying file=/usr/lib64/tls/libevent-2.0.so.5 
     19905:       trying file=/usr/lib64/x86_64/libevent-2.0.so.5 
     19905:       trying file=/usr/lib64/libevent-2.0.so.5 
     19905: 
/usr/local/bin/memcached: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory 

注意这句:

引用
19905: trying file=/usr/lib64/libevent-2.0.so.5

做个软连接

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

再试试:

  1. ldd /usr/local/bin/memcached

这回找到了!

引用
        linux-vdso.so.1 =>  (0x00007fffffef6000) 
        libevent-2.0.so.5 => /usr/lib64/libevent-2.0.so.5 (0x00002b5608a26000) 
        librt.so.1 => /lib64/librt.so.1 (0x0000003c94a00000) 
        libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003c93a00000) 
        libc.so.6 => /lib64/libc.so.6 (0x0000003c92e00000) 
        /lib64/ld-linux-x86-64.so.2 (0x0000003c92a00000)

五、监控 
可以在服务器上配置一个PHP页面来监测Memcached的情况, 
下载MemcachePHP

配置也比较简单,主要包括账户配置,以及Memcached Server地址配置。

  1. define('ADMIN_USERNAME','memcache');    // Admin Username
  2. define('ADMIN_PASSWORD','password');    // Admin Password
  3. define('DATE_FORMAT','Y/m/d H:i:s');
  4. define('GRAPH_SIZE',200);
  5. define('MAX_ITEM_DUMP',50);
  6. $MEMCACHE_SERVERS[] = 'mymemcache-server1:11211'; // add more as an array
  7. $MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array

常见错误:

引用
Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /home/usr/local/apache.../memcache.php on line 726 

在memcache.php顶端加上“date_default_timezone_set('Asia/Hong_Kong');”即可,具体地域设置参考:http://www.php.net/manual/zh/datetime.configuration.php#ini.date.timezone

如果不方便搭建PHP服务,可以使用Perl脚本memcache-top 
修改@default_instances或使用--instances参数:

  1. perl memcache-top-v0.6 --instances 10.11.155.26 10.11.155.41

先到这里,后续做压力测试,Java客户端开发,Spring系统集成等。

转载地址:http://snowolf.iteye.com/blog/1447348

Memcached理解笔记1---安装&常规错误&监控的更多相关文章

  1. Memcached笔记——(一)安装&常规错误&监控

    08年的时候接触过Memcached,当时还对它的客户端产品嗤之以鼻,毕竟手工代码没有各种ORM原生XML配置方便.尽管如此,Memcached现在已经成了服务器架构里不可或缺的一部分! 相关链接: ...

  2. Memcached理解笔记4---应对高并发攻击

    近半个月过得很痛苦,主要是产品上线后,引来无数机器用户恶意攻击,不停的刷新产品各个服务入口,制造垃圾数据,消耗资源.他们的最好成绩,1秒钟可以并发6次,赶在Database入库前,Cache进行Mis ...

  3. Memcached理解笔记3---Memcached使用总结

    为了将N个前端数据同步,通过Memcached完成数据打通,但带来了一些新问题: 使用iBatis整合了Memcached,iBatis针对每台server生成了唯一标识,导致同一份数据sql会产生不 ...

  4. (转)memcached学习笔记1(windows 7 64bit 环境下安装memcached)

    windows 7 64bit 环境下安装memcached 1.下载后解压到D:\memcached(下载地址:memcached-win64下载地址) 2.安装到windows服务,打开cmd命令 ...

  5. LNMP笔记:安装 Xcache 缓存扩展,降低服务器负载

    LNMP笔记:安装 Xcache 缓存扩展,降低服务器负载 2014/11/27 教程笔记 4,743 14     WordPress 精品主机推荐:恒创主机 | 阿里云(本站目前所用云主机) 倡萌 ...

  6. 前端监控系列2 |聊聊 JS 错误监控那些事儿

    作者:彭莉,火山引擎 APM 研发工程师.2020年加入字节,负责前端监控 SDK 的开发维护.平台数据消费的探索和落地. 有必要针对 JS 错误做监控吗? 我们可以先假设不对 JS 错误做监控,试想 ...

  7. Memcached在windows下安装与使用

    建议:windows系统下仅为测试所有,生产环境下服务端应使用Linux系统. 本文最后更新于:2014-08-03 18:24 原文:http://www.yaosansi.com/post/mem ...

  8. memcached 的简介、安装、命令

    一.memcached 概述 Memcache(内存,缓存) : 是一个高性能的分布式的内存对象缓存系统.通过在内存里维护一个巨大的hash表.(key=value) Hash表 key(键) val ...

  9. memcached学习笔记2--安装及命令

    学习memcached的原理: 用户一 -> 访问浏览器 -> 服务器Apache -> PHP文件(该文件应用了memcached技术) -> [第一次]到数据库DB中查找数 ...

随机推荐

  1. Ansible免密码登陆

    配置Linux主机无密码访问 生成秘钥 ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to ...

  2. FP-Growth in Spark MLLib

    并行FP-Growth算法思路 上图的单线程形成的FP-Tree. 分布式算法事实上是对FP-Tree进行分割,分而治之 首先,假设我们只关心...|c这个conditional transactio ...

  3. 数据库选项--ALTER DATABASE WITH 选项

    指定当数据库从一种状态转换到另一种状态时,何时回滚未完成的事务. 如果终止子句被忽略,则当数据库中存在任何锁时,ALTER DATABASE 语句将无限期等待. 只能指定一条终止子句,而且该子句应跟在 ...

  4. Checkpoint--实现步骤

    Checkpoint 实现步骤: 1.将CheckPoint标记写入日志(标记中包含当前数据库中活动的事务信息),并将Log Block写入持久化存储 2.将Buffer Pool中所有的脏页写入磁盘 ...

  5. SQL语句小tips(持续更新)

    统计非法数据 判断people_id是否是32为字母组成的,统计不满足要求的数据 SELECT COUNT(IF(BINARY people_id NOT REGEXP '^[0-9a-z]{32}' ...

  6. AbpZero之企业微信---登录(拓展第三方auth授权登录)---第二步:开始逐步实现企业微信登录

    上回分解到AbpZero的auth登录机制,这里我们开始着手逐步实现我们的auth登录. 我们新建一个类库XXXX.Web.Authentication.External 在类库下新建一个类QYWec ...

  7. ASP.NET控制HTTP缓存

    请求   响应 If-Modified-Since Last-Modified If-None-Match ETag 至于Expires和Cache-Control 附上几张高手的图 Etag 在使用 ...

  8. Asp.Net Mvc ScriptBundle 脚本文件捆绑压缩 导致 脚本出错的问题

    由于捆绑压缩会对所有包含的文件进行压缩,无法设置忽略对某个js文件的压缩.导致压缩该js后,脚本出错的问题. 解决方式: 重写 ScriptBundle 的 GenerateBundleRespons ...

  9. string的函数的学习

    1.string类型的构造函数和对象的定义 string s3 : 把string s2 拷贝的 s3 string s4 : 把数组首地址或者字符串首地址strArr 从0开始截取到第n个字母 st ...

  10. webpack快速入门——如何安装webpack及注意事项

    1.window+R键,输入cmd打开命令行工具,输入 mkdir XXXX(XX:文件夹名): 2.cd XXX 进入刚刚创建好的文件夹里,输入cnpm install -g webpack (安装 ...