Memcached在Linux环境下的使用详解

前端之家收集整理的这篇文章主要介绍了Memcached在Linux环境下的使用详解前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一、引言

             写有关Nosql数据库有关的文章已经有一段时间了,可以高兴的说,Redis暂时就算写完了,从安装到数据类型,在到集群,几乎都写到了。如果以后有了心得,再补充吧。然后就是MongoDB了,有关MongoDB的文章也写了一些了,安装、配置和基本使用都写了,然后就是一些高级的课题了。最近由于工作比较忙的原因,写东西就慢了,MongoDB的文章也暂缓了。今天正好有时间,我就把在Linux环境下安装和配置Memcached的过程写下来。其实这个文章不是今天写的了,写了有几天了,只是利用今天把文章发出来。

二、Memcached简介

           Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。

           Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。 本质上,它是一个简洁的key-value存储系统。和Redis是有些类似的,但是也有很大的不同了。

三、Memcached在Linux上的安装

         今天我们开始讲如何在Linux系统上安装和配置 Memcached 服务,过程很简单,马上开始我们的安装吧。

         1、准备安装环境

                     yum install gcc wget make cmake libtool autoconf


         2、下载相应的库和Memcached源码

                     libevent,因为Memcached依赖这个Libevent库,所以必须先下载安装

                     官网地址:http://libevent.org/


         3、先安装 Libevent 库文件

                    首先检查系统中是否安装了libevent

@H_301_56@                       [root@linux memcached]# pwd
                       /root/software/download/@H_301_56@memcached

                       [root@linux memcached]# rpm -qa |@H_301_56@grep libevent
                       [root@linux memcached]# //@H_301_56@无值说明libevent没有安装


                   如果安装了则查看libevent的安装路径,后续安装时需要用到

                       [root@linux bin]# rpm -@H_301_56@ql libevent
                       未安装软件包 libevent
                       [root@linux bin]# 


                   如果没有安装,则先安装libevent


                    3.1、下载libevent

@H_301_56@                        [root@linux download]# ls
                        libevent  memcached  mongodb  redis

                        [root@linux download]# cd libevent/@H_301_56@
                        [root@linux libevent]# wget https:@H_301_56@github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz
@H_301_56@
                        [root@linux libevent]# ls
                        libevent-2.1.8-@H_301_56@stable.tar.gz
                        [root@linux libevent]# 


                    3.2、tar 解压Libevent库文件             

@H_301_56@                        [root@linux libevent]# pwd
                        /root/software/download/@H_301_56@libevent

                        [root@linux libevent]# tar zxvf libevent-stable.tar.gz
                        [root@linux libevent]# ls
                        libevent-8-stable  libevent-8-stable.tar.gz


                    3.3、cd 进入根目录

                        [root@linux libevent]# cd libevent-stable
                        [root@linux libevent-stable]# pwd
                        /root/software/download/libevent/libevent-stable

                         [root@linux libevent-8-stable]# ./configure -h/-help @H_301_56@在根目录下面查看一下配置文件,方便以后使用


                    3.4、设置安装路径,安装目录可以自定义。我的安装目录是:/root/application/program/memcached/libevent

                        [root@linux libevent-8-stable]# ./configure --prefix=/root/application/program/memcached/@H_301_56@libevent
                        checking for a BSD-compatible install... /usr/bin/install -@H_301_56@c
                        checking whether build environment @H_301_56@is@H_301_56@ sane... yes
                        checking @H_301_56@for a thread-safe mkdir -p... /usr/bin/mkdir -@H_301_56@p
                        checking @H_301_56@for@H_301_56@ gawk... gawk
                        checking whether make sets $(MAKE)... yes
                        checking whether make supports nested variables... yes
                        checking whether make supports nested variables... (cached) yes
                        checking @H_301_56@ style of include used by make... GNU
                        checking @H_301_56@ gcc... gcc
                        ......
                        ......
                        checking size of pthread_t... 8@H_301_56@
                        checking @H_301_56@for library containing ERR_remove_thread_state... -@H_301_56@lcrypto
                        checking that generated files are newer than configure... done
                        configure: creating ./@H_301_56@config.status
                        config.status: creating libevent.pc
                        config.status: creating libevent_openssl.pc
                        config.status: creating libevent_pthreads.pc
                        config.status: creating libevent_core.pc
                        config.status: creating libevent_extra.pc
                        config.status: creating Makefile
                        config.status: creating config.h
                        config.status: creating evconfig-@H_301_56@private@H_301_56@.h
                        config.status: evconfig-@H_301_56@private.h @H_301_56@ unchanged
                        config.status: executing depfiles commands
                        config.status: executing libtool commands
                        [root@linux libevent-8-stable]# 


                    3.5、编译和安装 make && make install

                        [root@linux libevent-8-stable]# make && make install


         4、安装Memcached源文件

                    //这不可以不执行,默认有相应的权限。如果没有,修改安装包的执行操作权限,chmod 777 memcached-1.4.15.tar.gz  

                    4.1、下载 memcached-1.4.15 源程序

@H_301_56@                          [root@linux memcached]# pwd
                          /root/software/download/@H_301_56@memcached
                          [root@linux memcached]# wget memcached 的地址

                          [root@linux memcached]# ls
                          memcached-1.4.15@H_301_56@.tar.gz
                          [root@linux memcached]# 


                    4.2、解压Memcached 压缩文件

@H_301_56@memcached

                          [root@linux memcached]# tar zxvf memcached.tar.gz
                           memcached-15/@H_301_56@
                           memcached-Makefile.am
                           memcached-trace.h
                           memcached-config.guess
                           memcached-cache.c
                           memcached-util.c
                           memcached-assoc.c
                           ....
                           ....
                           memcached-15/doc/xml2rfc/rfc2629-@H_301_56@other.ent
                           memcached-15/doc/xml2rfc/reference.RFC.0768@H_301_56@.xml
                           memcached-xhtml.ent
                           memcached-noinc.xsl
                           memcached-refchk.xsl
                           memcached-15/doc/xml2rfc/@H_301_56@rfc2629.dtd
                           memcached-15/doc/@H_301_56@protocol.txt
                           memcached-Makefile
                           memcached-compile
                           [root@linux memcached]# 


                    4.3、进入到 memcached 根目录

@H_301_56@                          [root@linux memcached]# ls
                          memcached-15  memcached-.tar.gz
                          [root@linux memcached]# cd memcached-
                          [root@linux memcached-]# pwd
                          /root/software/download/memcached/memcached-15


                    4.4、配置安装目录

                          [root@linux memcached-

                          [root@linux memcached]# ./configure -h/-help  @H_301_56@可以查看memcached 配置文件,方便使用
@H_301_56@15]# ./configure --prefix=/root/application/program/memcached/memcachedfile --with-libevent=/root/application/program/memcached/@H_301_56@libevent
                          checking build system type... x86_64-unknown-linux-@H_301_56@gnu
                          checking host system type... x86_64-unknown-linux-@H_301_56@gnu
                          checking target system type... x86_64-unknown-linux-@H_301_56@gnu
                          checking @H_301_56@c
                          checking whether build environment @H_301_56@ sane... yes
                          checking @H_301_56@p
                          ....
                          ....
                          checking @H_301_56@ xml2rfc... no
                          checking @H_301_56@for xsltproc... /usr/bin/@H_301_56@xsltproc
                          configure: creating ./@H_301_56@config.status
                          config.status: creating Makefile
                          config.status: creating doc/@H_301_56@Makefile
                          config.status: creating config.h
                          config.status: executing depfiles commands
                          [root@linux memcached-15]# 


                    4.5、编译和安装 make && make install

                          [root@linux memcached-15]# make && make install


         5、启动Memcached服务环境

                   @H_301_56@启动程序必须在安装Memcached服务的目录的Bin目录下执行操作
@H_301_56@                   [root@linux bin]# pwd
                   /root/application/program/memcached/memcachedfile/@H_301_56@bin

                   [root@linux bin]# ./memcached -m 64 -p 11211 -u nobody -@H_301_56@vvv  前端
                   slab @H_301_56@class   1: chunk size        96 perslab   10922@H_301_56@
                   slab @H_301_56@2: chunk size       120 perslab    8738@H_301_56@3: chunk size       152 perslab    6898@H_301_56@4: chunk size       192 perslab    5461@H_301_56@5: chunk size       240 perslab    4369@H_301_56@6: chunk size       304 perslab    3449@H_301_56@
                   ....
                   ....
                   <29@H_301_56@ server listening (udp)
                   <30@H_301_56@ server listening (udp)
                   @H_301_56@当前处于阻塞状态,说明Memcached启动成功,但是该窗口不能关闭,否则服务也会关闭
@H_301_56@
                   [root@linux bin]# ./memcached -m d  后台启动
                   [root@linux bin]#

                   @H_301_56@查看memcache是否开启:
                   [root@linux ~]# netstat -ntpl|grep memcache


          6、关闭Memcached服务环境

                  [root@linux ~@H_301_56@]# kill PID(Memcached服务的进程号)  

                  [root@linux ~]# kill 12177


         7、配置

                启动参数介绍如下:和上面的命令不对应

                   -d选项是启动一个守护进程,

                   -m是分配给Memcache使用的内存数量,单位是MB,这里是10MB,

                   -u是运行Memcache的用户,这里是root,

                   -l是监听的服务器IP地址,如果有多个地址的话,这里指定了服务器的IP地址192.168.0.200,

                   -p是设置Memcache监听的端口,这里设置了12000,最好是1024以上的端口,

                   -c选项是最大运行的并发连接数,默认是1024,这里设置了256,按照服务器的负载量来设定,

                   -P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid,也可以启动多个守护进程,不过端口不能重复。


         8、我们可以查看memcached命令的帮助文件

@H_301_56@ 1 @H_301_56@                 [root@linux bin]# pwd
@H_301_56@ 2                  /root/application/program/memcached/memcachedfile/@H_301_56@bin
@H_301_56@ 3                  [root@linux bin]# ./memcached -h/-@H_301_56@help
@H_301_56@ 4                  memcached 15
@H_301_56@ 5                  -p <num>      TCP port number to listen on (@H_301_56@default: 11211@H_301_56@)
@H_301_56@ 6                  -U <num>      UDP port number to listen on (@H_301_56@11211,0 @H_301_56@ off)
@H_301_56@ 7                  -s <file>@H_301_56@     UNIX socket path to listen on (disables network support)
@H_301_56@ 8                  -a <mask>     access mask @H_301_56@for UNIX socket,@H_301_56@in octal (@H_301_56@0700@H_301_56@ 9                  -l <addr>     @H_301_56@interface to listen on (@H_301_56@default@H_301_56@: INADDR_ANY,all addresses)
@H_301_56@10                                <addr> may be specified @H_301_56@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
@H_301_56@11                  -d            run @H_301_56@as@H_301_56@ a daemon
@H_301_56@12                  -@H_301_56@r            maximize core file limit
@H_301_56@13                  -u <username> assume identity of <username> (only when run @H_301_56@ root)
@H_301_56@14                  -m <num>      max memory to use @H_301_56@for items @H_301_56@in megabytes (@H_301_56@64@H_301_56@ MB)
@H_301_56@15                  -M            @H_301_56@return@H_301_56@ error on memory exhausted (rather than removing items)
@H_301_56@16                  -c <num>      max simultaneous connections (@H_301_56@1024@H_301_56@17                  -k            @H_301_56@lock down all paged memory.  Note that there @H_301_56@is a limit on how much memory you may @H_301_56@lock.  Trying to allocate more than that would fail,so be sure you @H_301_56@set the limit correctly @H_301_56@for the user you started              the daemon with (not @H_301_56@for -u <username> user;under sh @H_301_56@this @H_301_56@is done with ulimit -S -l NUM_KB'@H_301_56@).
@H_301_56@18                  -v            verbose (print errors/warnings @H_301_56@while @H_301_56@in @H_301_56@event@H_301_56@ loop)
@H_301_56@19                  -vv           very verbose (also print client commands/@H_301_56@reponses)
@H_301_56@20                  -vvv          extremely verbose (also print @H_301_56@internal@H_301_56@ state transitions)
@H_301_56@21                  -h            print @H_301_56@this@H_301_56@ help and exit
@H_301_56@22                  -@H_301_56@i            print memcached and libevent license
@H_301_56@23                  -P <file>     save PID @H_301_56@in <file>,only used with -@H_301_56@d option
@H_301_56@24                  -f <factor>   chunk size growth factor (@H_301_56@1.25@H_301_56@25                  -n <bytes>    minimum space allocated @H_301_56@for key+value+flags (@H_301_56@48@H_301_56@26                  -L            Try to use large memory pages (@H_301_56@if available). Increasing the memory page size could reduce the number of TLB misses and improve the performance. In order to @H_301_56@get large pages @H_301_56@from the OS,memcached will allocate the total item-cache @H_301_56@in@H_301_56@ one large chunk.
@H_301_56@27                  -D <@H_301_56@char>     Use <@H_301_56@char> @H_301_56@as the delimiter between key prefixes and IDs.This @H_301_56@is used @H_301_56@for per-prefix stats reporting. The @H_301_56@default @H_301_56@is ":" (colon). If @H_301_56@this option @H_301_56@is specified,stats collection @H_301_56@is turned on automatically; @H_301_56@if not,then it may be turned on by sending the stats detail on"@H_301_56@ command to the server.
@H_301_56@28                  -t <num>      number of threads to use (@H_301_56@4@H_301_56@29                  -R            Maximum number of requests per @H_301_56@event,limits the number of requests process @H_301_56@for a given connection to prevent starvation (@H_301_56@20@H_301_56@30                  -@H_301_56@C            Disable use of CAS
@H_301_56@31                  -b            Set the backlog queue limit (@H_301_56@32                  -B            Binding protocol - one of ascii,binary,or auto (@H_301_56@33                  -I            Override the size of each slab page. Adjusts max item size (@H_301_56@: 1mb,min: 1k,max: 128m)
@H_301_56@34                  -@H_301_56@o            Comma separated list of extended or experimental options
@H_301_56@35                                - (EXPERIMENTAL) maxconns_fast: immediately close @H_301_56@new connections @H_301_56@if@H_301_56@ over maxconns limit
@H_301_56@36                                - hashpower: An integer multiplier @H_301_56@for how large the hash table should be. Can be grown at runtime @H_301_56@if not big enough.Set @H_301_56@this based on STAT hash_power_level before a restart.
@H_301_56@37                 [root@linux bin]# 


         9、我们使用telnet命令来连接Linux系统上的Memcached服务。


                   9.1、在Window环境下通过telnet连接Memcached服务

@H_301_56@ 1                         C:\Users\Administrator>telnet192.168.127.130 11211
@H_301_56@ 2 
@H_301_56@ 3                         @H_301_56@当前处于黑屏状态,等待输入命令,直接输入stats,直接回车。
@H_301_56@ 4 @H_301_56@                        stats
@H_301_56@ 5                         STAT pid 12177
@H_301_56@ 6                         STAT uptime 619
@H_301_56@ 7                         STAT time 1522221744
@H_301_56@ 8                         STAT version  9                         STAT libevent stable
@H_301_56@10                         STAT pointer_size 64
@H_301_56@11                         STAT rusage_user 0.005197
@H_301_56@12                         STAT rusage_system 0.067566
@H_301_56@13                         STAT curr_connections 10
@H_301_56@14                         STAT total_connections 12
@H_301_56@15                         STAT connection_structures 11
@H_301_56@16                         STAT reserved_fds 20
@H_301_56@17                         STAT cmd_get 0
@H_301_56@18                         STAT cmd_set 19                         STAT cmd_flush 20                         STAT cmd_touch 21                         STAT get_hits 22                         STAT get_misses 23                         STAT delete_misses 24                         STAT delete_hits 25                         STAT incr_misses 26                         STAT incr_hits 27                         STAT decr_misses 28                         STAT decr_hits 29                         STAT cas_misses 30                         STAT cas_hits 31                         STAT cas_badval 32                         STAT touch_hits 33                         STAT touch_misses 34                         STAT auth_cmds 35                         STAT auth_errors 36                         STAT bytes_read 37
@H_301_56@37                         STAT bytes_written 21
@H_301_56@38                         STAT limit_maxbytes 67108864
@H_301_56@39                         STAT accepting_conns 1
@H_301_56@40                         STAT listen_disabled_num 41                         STAT threads 4
@H_301_56@42                         STAT conn_yields 43                         STAT hash_power_level 16
@H_301_56@44                         STAT hash_bytes 524288
@H_301_56@45                         STAT hash_is_expanding 46                         STAT bytes 47                         STAT curr_items 48                         STAT total_items 49                         STAT expired_unfetched 50                         STAT evicted_unfetched 51                         STAT evictions 52                         STAT reclaimed 53 @H_301_56@                        END
@H_301_56@54 
@H_301_56@55                         @H_301_56@能连接上,说明memcache成功启用,可使用stats命令查看当前状态


                   9.2、在Linux环境下使用telnet命令连接Memcached服务

@H_301_56@ 1                         [root@linux bin]# telnet 192.168.127.130  2                         Trying 127.130@H_301_56@...
@H_301_56@ 3                         Connected to .
@H_301_56@ 4                         Escape character @H_301_56@^] 5                         @H_301_56@当前窗口处于等待状态,可以直接输入命令执行
@H_301_56@ 6                         stats @H_301_56@直接运行该命令
@H_301_56@ 7                         STAT pid  8                         STAT uptime  9                         STAT time 10                         STAT version 11                         STAT libevent 12                         STAT pointer_size 13                         STAT rusage_user 14                         STAT rusage_system 15                         STAT curr_connections 16                         STAT total_connections 17                         STAT connection_structures 18                         STAT reserved_fds 19                         STAT cmd_get 20                         STAT cmd_set 21                         STAT cmd_flush 22                         STAT cmd_touch 23                         STAT get_hits 24                         STAT get_misses 25                         STAT delete_misses 26                         STAT delete_hits 27                         STAT incr_misses 28                         STAT incr_hits 29                         STAT decr_misses 30                         STAT decr_hits 31                         STAT cas_misses 32                         STAT cas_hits 33                         STAT cas_badval 34                         STAT touch_hits 35                         STAT touch_misses 36                         STAT auth_cmds 37                         STAT auth_errors 38                         STAT bytes_read 39                         STAT bytes_written 40                         STAT limit_maxbytes 41                         STAT accepting_conns 42                         STAT listen_disabled_num 43                         STAT threads 44                         STAT conn_yields 45                         STAT hash_power_level 46                         STAT hash_bytes 47                         STAT hash_is_expanding 48                         STAT bytes 49                         STAT curr_items 50                         STAT total_items 51                         STAT expired_unfetched 52                         STAT evicted_unfetched 53                         STAT evictions 54                         STAT reclaimed 55 @H_301_56@56 
@H_301_56@57                         @H_301_56@能连接上,说明memcache成功启用,可使用stats命令查看当前状态


         10、查看Memcached服务是否启动:ps aux|grep memcached 或者 ps -ef|grep memcached

                    [root@linux ~]# ps aux|@H_301_56@grep memcached
                    nobody    12177  0.0  0.0 323584  1052 ?        Ssl  15:12   0:00 ./memcached -m d
                    root      12292  116860  1012 pts/0    S+   33   00 grep --color=@H_301_56@auto memcached

                    [root@linux ~]# ps -ef|@H_301_56@12177      1  0 12 ?        00:12295  11965  33 pts/0    00 grep --color=auto memcached


         11、如果我们通过telnet命令无法连接Linux上的Linux系统上的Memcached服务,可能和端口有关系。

                    @H_301_56@在使用window的cmd连接Linux环境上的Memcached的时候,必须先把11211这个端口增加到防火墙,否则无法连接,执行命令如下:@H_301_56@
                    [root@linux ~]# firewall-cmd --zone=@H_301_56@public --add-port=11211/tcp --@H_301_56@permanent
                    [root@linux ~]# firewall-cmd --@H_301_56@reload

                    @H_301_56@再次重新连接就没有问题了


四、总结

        
好了,写完了。有关Memcached的文章可能要晚一点再出来了,先要把MongoDB的文章写完,再来写有关Memcached的文章了,学习和使用也需要一个过程。还有一个原因,由于Redis的崛起和强大,已经完全可以替代Memcached了,而且很多的公司也不使用它了,所以由于原因种种,该系列就往后推了。

猜你在找的NoSQL相关文章