1、概述
Memcached是一个C语言编写的高性能分布式的内存对象缓存系统,用于减少Web应用直接跟数据库交互,从而减轻数据库负载压力,将一些经常访问的数据对象以K/V(键/值)对的形式存放在内存中作为缓存数据。缓存是一种加速应用向后端服务器读取数据的优化手段,其思想是用对内存的读取换取直接对磁盘数据库中数据的操作,以提高web应用程序的访问速度,从而实现web动态页面高性能、高并发的访问。
Memcached是通过C语言Danga Interactive开发编写的,使用libevent框架实现底层的TCP/IP通信,只要支持Socket操作的语言都可以编写自己的客户端,与Memcached Server端进行通信,从而使用Memcached提供的功能。
因为应用程序链接memcached仅通过(IP+端口)的形式,所以memcached有内存泄露的风险,因此它不会在web前段或公网上部署。它的部署一般位于web和数据库之间,用于缓解数据库的压力。
原文:memcached is a flexible memory object caching daemon designed to alleviate database load in dynamic web applications by storing objects in memory. It's based on libevent to scale to any size needed, and is specifically optimized to avoid swap-ping and always use non-blocking I/O.
译文:memcached 是一个灵活的内存对象缓存守护进程。它通过将对象缓存在内存中,从而降低WEB应用对数据库的压力。它基于 libevent 库,可以伸缩到任意大小,并永远使用非阻塞的网络I/O。因此在使用 memcached 的机器上应避免使用虚拟内存(swap)。
2、memcached的安装部署
2.1、源码获取
[root@mysqldb1 ~]# wget http://memcached.org/files/memcached-1.4.24.tar.gz
[root@mysqldb1 ~]# wget http://nchc.dl.sourceforge.net/project/levent/libevent/libevent-2.0/libevent-2.0.22-stable.tar.gz 2.2、安装libevent库
因为memcached是基于libevent库,所以我们在安装memcached之前得先安装libevent,下面是安装libevent的步骤方法:
[root@mysqldb1 ~]# tar xf libevent-2.0.22-stable.tar.gz
[root@mysqldb1 ~]# cd libevent-2.0.22-stable
[root@mysqldb1 libevent-2.0.22-stable]# ./configure --prefix=/usr/local
[root@mysqldb1 libevent-2.0.22-stable]# make && make install
[root@mysqldb1 libevent-2.0.22-stable]# cd ..
[root@mysqldb1 ~]#
2.3、安装memcached缓存服务器
[root@mysqldb1 ~]# tar xf memcached-1.4.24.tar.gz
[root@mysqldb1 memcached-1.4.24]# cd memcached-1.4.24
[root@mysqldb1 memcached-1.4.24]# ./configure --with-libevent=/usr/local
[root@mysqldb1 memcached-1.4.24]# make && make install
[root@mysqldb1 memcached-1.4.24]# cd ..
[root@mysqldb1 ~]#
2.4、查看安装结果
[root@mysqldb1 ~]# ls -al /usr/local/bin/mem*
-rwxr-xr-x. 1 root root 360873 Oct 22 00:22 /usr/local/bin/memcached
6.4、replace:仅当键已经存在时,replace 命令才会替换缓存中键相对应值。如果缓存中不存在键,那么您将从memcached 服务器接受到一条NOT_STORED 响应。
[root@mysqldb1 ~]# printf "replace number 0 0 4 \r\n2000\r\n" | nc 192.168.1.2 11211
STORED
[root@mysqldb1 ~]# printf "get number\r\n" | nc 192.168.1.2 11211
VALUE number 0 4
2000
END
6.5、delete:用于删除memcached 中的任何现有值。您将使用一个键调用delete ,如果该键存在于缓存中,则删除该值。如果不存在,则返回一条NOT_FOUND 消息。
[root@mysqldb1 ~]# printf "delete number\r\n" | nc 192.168.1.2 11211
DELETED
[root@mysqldb1 ~]# printf "get number\r\n" | nc 192.168.1.2 11211
END
6.7、get及gets:两个命令使用及其之间的差异比较。
[root@mysqldb1 ~]# printf "get key\r\n" | nc 192.168.1.2 11211
VALUE key 0 7
liangge
END
[root@mysqldb1 ~]# printf "gets key\r\n" | nc 192.168.1.2 11211
VALUE key 0 7 1
liangge
END
6.8、memcached状态信息的查看
[root@mysqldb1 ~]# printf "stats\r\n" | nc 192.168.1.2 11211
STAT pid 1999
STAT uptime 37
STAT time 1446323288
STAT version 1.4.24
STAT libevent 2.0.22-stable
STAT pointer_size 64
STAT rusage_user 0.000000
STAT rusage_system 0.039993
STAT curr_connections 10
STAT total_connections 13
STAT connection_structures 11
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 21
STAT bytes_written 14
STAT limit_maxbytes 268435456
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 malloc_fails 0
STAT bytes 0
STAT curr_items 0
STAT total_items 0
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