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

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

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


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

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


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


                    3.1、下载libevent

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

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

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


                    3.2、tar 解压Libevent库文件             

                        [root@linux libevent]# pwd
                        /root/software/download/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 在根目录下面查看一下配置文件,方便以后使用


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

                        [root@linux libevent-8-stable]# ./configure --prefix=/root/application/program/memcached/libevent
                        checking for a BSD-compatible install... /usr/bin/install -c
                        checking whether build environment is sane... yes
                        checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
                        checking for gawk... gawk
                        checking whether make sets $(MAKE)... yes
                        checking whether make supports nested variables... yes
                        checking whether make supports nested variables... (cached) yes
                        checking  style of include used by make... GNU
                        checking  gcc... gcc
                        ......
                        ......
                        checking size of pthread_t... 8
                        checking for library containing ERR_remove_thread_state... -lcrypto
                        checking that generated files are newer than configure... done
                        configure: creating ./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-private.h
                        config.status: evconfig-private.h  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 源程序

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

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


                    4.2、解压Memcached 压缩文件

memcached

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


                    4.3、进入到 memcached 根目录

                          [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  可以查看memcached 配置文件,方便使用
15]# ./configure --prefix=/root/application/program/memcached/memcachedfile --with-libevent=/root/application/program/memcached/libevent
                          checking build system type... x86_64-unknown-linux-gnu
                          checking host system type... x86_64-unknown-linux-gnu
                          checking target system type... x86_64-unknown-linux-gnu
                          checking c
                          checking whether build environment  sane... yes
                          checking p
                          ....
                          ....
                          checking  xml2rfc... no
                          checking for xsltproc... /usr/bin/xsltproc
                          configure: creating ./config.status
                          config.status: creating Makefile
                          config.status: creating doc/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服务环境

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

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

                   [root@linux bin]# ./memcached -m d  后台启动
                   [root@linux bin]#

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


          6、关闭Memcached服务环境

                  [root@linux ~]# 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命令的帮助文件

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


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


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

 1                         C:\Users\Administrator>telnet192.168.127.130 11211
 2 
 3                         当前处于黑屏状态,等待输入命令,直接输入stats,直接回车。
 4                         stats
 5                         STAT pid 12177
 6                         STAT uptime 619
 7                         STAT time 1522221744
 8                         STAT version  9                         STAT libevent stable
10                         STAT pointer_size 64
11                         STAT rusage_user 0.005197
12                         STAT rusage_system 0.067566
13                         STAT curr_connections 10
14                         STAT total_connections 12
15                         STAT connection_structures 11
16                         STAT reserved_fds 20
17                         STAT cmd_get 0
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
37                         STAT bytes_written 21
38                         STAT limit_maxbytes 67108864
39                         STAT accepting_conns 1
40                         STAT listen_disabled_num 41                         STAT threads 4
42                         STAT conn_yields 43                         STAT hash_power_level 16
44                         STAT hash_bytes 524288
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                         END
54 
55                         能连接上,说明memcache成功启用,可使用stats命令查看当前状态


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

 1                         [root@linux bin]# telnet 192.168.127.130  2                         Trying 127.130...
 3                         Connected to .
 4                         Escape character ^] 5                         当前窗口处于等待状态,可以直接输入命令执行
 6                         stats 直接运行该命令
 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 56 
57                         能连接上,说明memcache成功启用,可使用stats命令查看当前状态


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

                    [root@linux ~]# ps aux|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=auto memcached

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


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

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

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


四、总结

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读752次。关系型数据库关系型数据库是一个结构化的数据库,创建在关系模型(二维表模型)基础上,一般面向于记录SQL语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作主流的关系数据库包括Oracle、Mysql、SQL Server、Microsoft Access、DB2等非关系型数据库NoSQL(nOSQL=Not Only SQL),意思是“不仅仅是SQL”,是非关系型数据库的总称。除了主流的关系型数据库外的数据库,都认为是非关系型主流的NoSQ.._redis是非关系型数据库吗
文章浏览阅读687次,点赞2次,收藏5次。商城系统中,抢购和秒杀是很常见的营销场景,在一定时间内有大量的用户访问商场下单,主要需要解决的问题有两个:1. 高并发对数据库产生的压力;2. 竞争状态下如何解决商品库存超卖;高并发对数据库产生的压力对于第一个问题,使用缓存来处理,避免直接操作数据库,例如使用 Redis。竞争状态下如何解决商品库存超卖对于第二个问题,需要重点说明。常规写法:查询出对应商品的库存,判断库存数量否大于 0,然后执行生成订单等操作,但是在判断库存是否大于 0 处,如果在高并发下就会有问题,导致库存_php库存结余并发
文章浏览阅读1.4k次。MongoTemplate开发spring-data-mongodb提供了MongoTemplate和MongoRepository两种方式访问MongoDB,MongoRepository的方式访问较为简单,MongoTemplate方式较为灵活,这两种方式在Java对于MongoDB的运用中相辅相成。_springboot插入指定的mongodb数据库
文章浏览阅读887次,点赞10次,收藏19次。1.背景介绍1. 背景介绍NoSQL数据库是一种非关系型数据库,它的特点是可以存储非结构化的数据,并且可以处理大量的数据。HBase是一个分布式、可扩展的列式存储系统,它是基于Google的Bigtable设计的。HBase是一个开源的NoSQL数据库,它的核心功能是提供高性能的随机读写访问。在本文中,我们将对比HBase与其他NoSQL数据库,例如Redis、MongoDB、Cass...
文章浏览阅读819次。MongoDB连接失败记录_edentialmechanisn-scram-sha-1
文章浏览阅读470次。mongodb抽取数据到ES,使用ELK内部插件无法获取数据,只能试试monstache抽取mongodb数据,但是monstache需要mongodb replica set 模式才能采集数据。############monstache-compose文件。#replicas set 启动服务。# 默认备份节点不能读写,可以设置。# mydb指的是需要同步的数据库。#登录主mongodb初始化rs。#primary 创建用户。# ip地址注意要修改。# ip地址注意要修改。_monstache csdn
文章浏览阅读913次,点赞4次,收藏5次。storage:fork: trueadmin登录切换数据库注意: use 代表创建并使用,当库中没有数据时默认不显示这个库删除数据库查看表清单> show tables # 或者 > show collections表创建db.createCollection('集合名称', [options])table1字段类型描述capped布尔(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。_mongodb5
文章浏览阅读862次。Centos7.9设置MongoDB开机自启(超全教程,一条龙)_mongodb centos开机启动脚本
文章浏览阅读1.3k次,点赞6次,收藏21次。NoSQL数据库使用场景以及架构介绍
文章浏览阅读856次,点赞21次,收藏20次。1.背景介绍1. 背景介绍NoSQL数据库是一种非关系型数据库,它的设计目标是为了解决传统关系型数据库(如MySQL、Oracle等)在处理大量不结构化数据方面的不足。NoSQL数据库可以处理大量数据,具有高性能、高可扩展性和高可用性。但是,与关系型数据库不同,NoSQL数据库没有固定的模式,数据结构也不一定是表格。在NoSQL数据库中,数据存储和查询都是基于键值对、列族、图形等不同的...
文章浏览阅读416次。NoSQL定义:非关系型、分布式、开放源码和具有横向扩展能力的下一代数据库。由c++编写的开源、高性能、无模式的基于分布式文件存储的文档型数据库特点:高性能、高可用性、高扩展性、丰富的查询支持、可替换已完场文档某个指定的数据字段应用场景:社交场景:使用mongodb存储用户信息游戏场景:用户信息,装备积分物流场景:订单信息,订单状态场景操作特点:数据量大;读写操作频繁;价值较低的数据,对事物性要求不高开源、c语言编写、默认端口号6379、key-value形式存在,存储非结构化数据。_nosql
文章浏览阅读1.5k次,点赞3次,收藏2次。Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: Failed to create socket. at redis.clients.jedis.DefaultJedisSocketFactory.createSocket(DefaultJedisSocketFactory.java:110) at redis.clients.jedis.Connection.connect(Conne_redis.clients.jedis.exceptions.jedisconnectionexception: failed to create so
文章浏览阅读6.5k次,点赞3次,收藏12次。readAnyDatabase(在所有数据库上都有读取数据的权限)、readWriteAnyDatabase(在所有数据库上都有读写数据的权限)、userAdminAnyDatabase(在所有数据库上都有管理user的权限)、dbAdminAnyDatabase(管理所有数据库的权限);:clusterAdmin(管理机器的最高权限)、clusterManager(管理和监控集群的权限)、clusterMonitor(监控集群的权限)、hostManager( 管理Server);_mongodb创建用户密码并授权
文章浏览阅读593次。Redis是一个基于内存的键值型NoSQL数据库,在实际生产中有着非常广泛的用处_搭建本地redis
文章浏览阅读919次。Key 的最佳实践[业务名]:[数据名]:[id]足够简短:不超过 44 字节不包含特殊字符Value 的最佳实践:合理的拆分数据,拒绝 BigKey选择合适数据结构Hash 结构的 entry 数量不要超过 1000(默认是 500,如果达到上限则底层会使用哈希表而不是 ZipList,内存占用较多)设置合理的超时时间批量处理的方案:原生的 M 操作Pipeline 批处理注意事项:批处理时不建议一次携带太多命令。Pipeline 的多个命令之间不具备原子性。_redis高级实战
文章浏览阅读1.2k次。MongoDB 递归查询_mongodb数据库 递归
文章浏览阅读1.2k次。通过实际代码例子介绍:如何通过MongoTemplate和MongoRepository操作数据库数据_springboot操作mongodb
文章浏览阅读687次,点赞7次,收藏2次。首先欢迎大家阅读此文档,本文档主要分为三个模块分别是:Redis的介绍及安装、RedisDesktopManager可视化工具的安装、主从(哨兵)模式的配置。_redis 主从配置工具
文章浏览阅读764次。天下武功,无坚不摧,唯快不破!我的名字叫 Redis,全称是 Remote Dictionary Server。有人说,组 CP,除了要了解她外,还要给机会让她了解你。那么,作为开发工程师的你,是否愿意认真阅读此心法抓住机会来了解我,运用到你的系统中提升性能。我遵守 BSD 协议,由意大利人 Salvatore Sanfilippo 使用 C 语言编写的一个基于内存实现的键值型非关系(NoSQL)..._redis 7.2 源码
文章浏览阅读2k次。MongoDB 的增删改查【1】_mongodb $inc