介绍

Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。

Memcache是danga的一个项目,最早是LiveJournal 服务的,最初为了加速 LiveJournal 访问速度而开发的,后来被很多大型的网站采用。memcached的最新版是采用c语言进行开发和设计的,据说旧版的是采用perl语言开发的。

Memcached是以守护程序(监听)方式运行于一个或多个服务器中,随时会接收客户端的连接和操作。

使用Memcache的网站一般流量都是比较大的,为了缓解数据库的压力,让Memcache作为一个缓存区域,把部分信息保存在内存中,在前端能够迅速的进行存取。那么一般的焦点就是集中在如何分担数据库压力和进行分布式,毕竟单台Memcache的内存容量的有限的。

工作流程

先检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作;如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序明确实现);每次更新数据库的同时更新memcached中的数据,保证一致性;当分配给memcached内存空间用完之后,会使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效数据首先被替换,然后再替换掉最近未使用的数据。

准备

1. 下载安装文件:

cd /tmp

wget http://downloads.sourceforge.net/levent/libevent-2.0.22-stable.tar.gz

wget http://www.memcached.org/files/memcached-1.4.22.tar.gz

Memcached 1.4.22 发布下载,集中式缓存系统 http://www.linuxidc.com/Linux/2015-01/111276.htm

安装

1. 先安装libevent(memcached依赖libevent):

tar zxvf libevent-2.0.22-stable.tar.gz

cd libevent-2.0.22-stable

./configure --prefix=/usr

make && make install

2. 测试libevent是否安装成功:

ls -al /usr/lib | grep libevent-

看到类似如下截图,说明libevent安装成功:

3. 安装memcached:

cd /tmp

tar zxvf memcached-1.4.22.tar.gz

cd memcached-1.4.22

./configure --with-libevent=/usr --enable-64bit --enable-threads

make && make install

注意:默认memcached单个进程只支持到2G内存,需要更大内存支持的话,需要打开64位支持,编译的时候加参数:

--enable-64bit

4. 测试memcached是否安装成功:

ls –al /usr/local/bin/memcached

看到类似如下截图,说明memcached安装成功:

配置

1. 创建启动用户memcached:

groupadd memcached

useradd -g memcached memcached

2. 创建PID进程目录:

cd /var/run

mkdir memcached

chown –R memcached.memcached memcached

服务的启动和关闭

命令行方式:

1. 启动服务:一下两者都行

/usr/local/bin/memcached –d –m 2048 –p 11211 -u memcached -t 10 –P /var/run/memcached/memcached.pid

/usr/local/bin/memcached -d -m 2048  -p 11211 -u memcached -t 10

2. 查看是否启动成功:

ps –ef | grep memcached

看到类似如下截图,说明memecached启动成功

3. 关闭服务:

Kill -9 进程号

kill `cat /var/run/memcached/memcached.pid`

4. 查看是否关闭成功:

ps –ef | grep memcached

服务方式:

1. 生成启动和关闭脚本:

cp /tmp/memcached-1.4.22/scripts/memcached.sysv /etc/init.d/memcached

2. 修改启动帐号:

chown memcached.memcached /etc/init.d/memcached

3. 赋予执行权限:

chmod 755 /etc/init.d/memcached

4. 修改/etc/init.d/memcached配置参数值:

PORT=11211

USER=memcached

MAXCONN=1024

CACHESIZE=128

OPTIONS=””

chown $USER /usr/local/bin/memcached

/usr/local/bin/memcached –d –p $PORT –u $USER –m $CACHESIZE –c $MAXCONN –P /var/run/memcached/memcached.pid $OPTIONS

5. 加入系统服务,并启动memcached服务,同时查看是否启动成功:

chkconfig –add memcached

chkconfig –level 235 memcached on

chkconfig –list memcached

如下截图所示:

6. 启动memcached服务,并检查memcached是否启动,并关闭memcached:

service memcached start

ps –ef | grep memcached

service memcached stop

如下截图所示:

配置防火墙策略

通过telnet ip port来测试外部服务器对memcached是否可以访问,如果不能访问,添加防火墙策略:

iptables –I INPUT –p tcp –dport 11211 –j ACCEPT;  iptables –I OUTPUT –p tcp –sport 11211 –j ACCEPT;

iptables-save

service iptables save;

再次测试端口是否可访问。

注意

安装libevent的时候最好指定—prefix=/usr,不然在安装memcached的时候可能会报找不到libevent的错误。当然可以对库文件建立软连接可解决。

二、测试memcached

1、命令中输入:telnet 192.168.120.28 11211(你安装的主机的ip和memcached启动端口),然后直接敲击stats命令

stats

STAT pid 16321

STAT uptime 2831

STAT time 1322126000

STAT version 1.4.6

STAT libevent 2.0.12-stable

STAT pointer_size 64

STAT rusage_user 0.004999

STAT rusage_system 0.004999

STAT curr_connections 12

STAT total_connections 18

STAT connection_structures 13

STAT cmd_get 6

STAT cmd_set 7

STAT cmd_flush 0

STAT get_hits 5

STAT get_misses 1

STAT delete_misses 0

STAT delete_hits 1

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 auth_cmds 0

STAT auth_errors 0

STAT bytes_read 5023

STAT bytes_written 7246

STAT limit_maxbytes 536870912

STAT accepting_conns 1

STAT listen_disabled_num 0

STAT threads 4

STAT conn_yields 0

STAT bytes 2479

STAT curr_items 2

STAT total_items 7

STAT evictions 0

STAT reclaimed 0

END

三、Memcache的常用命令

查询状态命令:stats

查询版本号 version

退出命令 quit

清空缓存数据(其实是将所有缓存数据标记为过期):flush_all

memcached的协议与数据存取

所谓协议,可以理解为对其操作(数据存取)的语法规则,存取数据的常用命令和参数如下:

set:存入一条记录

key:记录的键值

flags:十进制的int,标识存储记录时的客户端标志,在记录取出时会返回。

exptim:数据的过期时间,0表示不过期,其他数值则表示有效的毫秒数,在过期后,客户端将取不到这条记录,memcached中的过期记录会被清空或删除。

get:表示从memcached取出key对应的值,如果没有对应的值则返回结束标志END

append:表示对key所对应的值在最后再加入输入的内容

delete:删除key对应的值

Memcached常用命令及使用说明

一、存储命令

存储命令的格式:

1.<command name> <key> <flags> <exptime> <bytes>

2.<data block>

参数说明如下:

1、添加

(1)、无论如何都存储的set

这个set的命令在memcached中的使用频率极高。set命令不但可以简单添加,如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用。

可以通过“get 键名”的方式查看添加进去的记录:

如你所知,我们也可以通过delete命令删除掉,然后重新添加。

(2)、只有数据不存在时进行添加的add

(3)、只有数据存在时进行替换的replace

2、删除delete

二、读取命令

1、get

get命令的key可以表示一个或者多个键,键之间以空格隔开

2、gets

可以看到,gets命令比普通的get命令多返回了一个数字(上图中为13)。这个数字可以检查数据是否发生改变。当key对应的数据改变时,这个多返回的数字也会改变。

3、cas

cas即checked and set的意思,只有当最后一个参数和gets所获取的参数匹配时才能存储,否则返回“EXISTS”。

三、状态命令

1、stats

2、stats items

执行stats items,可以看到STAT items行,如果memcached存储内容很多,那么这里也会列出很多的STAT items行。

3、stats cachedump slab_id limit_num

我们执行stats cachedump 1 0 命令效果如下:

这里slab_id为1,是由2中的stats items返回的结果(STAT items后面的数字)决定的;limit_num看起来好像是返回多少条记录,猜的一点不错, 不过0表示显示出所有记录,而n(n>0)就表示显示n条记录,如果n超过该slab下的所有记录,则结果和0返回的结果一致。

通过stats items、stats cachedump slab_id limit_num配合get命令可以遍历memcached的记录。

4、其他stats命令

如stats slabs,stats sizes,stats reset等等使用也比较常见。

四、其他常见命令

1、append

在现有的缓存数据后添加缓存数据,如现有缓存的key不存在服务器响应为NOT_STORED。

2、prepend

和append非常类似,但它的作用是在现有的缓存数据前添加缓存数据。

3、flush_all

该命令有一个可选的数字参数。它总是执行成功,服务器会发送 “OK\r\n” 回应。它的效果是使已经存在的项目立即失效(缺省),或在指定的时间后。此后执行取回命令,将不会有任何内容返回(除非重新存储同样的键名)。 flush_all 实际上没有立即释放项目所占用的内存,而是在随后陆续有新的项目被储存时执行(这是由memcached的懒惰检测和删除机制决定的)。

flush_all 效果是它导致所有更新时间早于 flush_all 所设定时间的项目,在被执行取回命令时命令被忽略。

4、其他命令

memcached还有很多命令,比如对于存储为数字型的可以通过incr/decr命令进行增减操作等等,这里只列出开发和运维中经常使用的命令,其他的不再一一举例说明。

Memcache安装配置的更多相关文章

  1. Memcache 安装配置使用

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.                                                     ...

  2. Linux Memcache 安装配置

    mkdir /soft cd /soft wget http://memcached.org/files/memcached-1.4.29.tar.gz tar -zxvf memcached-.ta ...

  3. Windows下MemCache多端口安装配置

    Windows下MemCache环境安装配置的文章很多,但大部分都是用的默认端口11211,如何修改默认端口.如何在一台服务器上配置多个MemCache端口?这正式本文要解决的问题. 1.从微软官网下 ...

  4. php5.4之分布式缓存memcache(windows7下安装配置)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/qq1355541448/article/details/36663203 使用理由:就是为了频繁查询 ...

  5. Windows下的Memcache安装 linux下的Memcache安装

    linux下的Memcache安装: 1. 下载 memcache的linux版本,注意 memcached 用 libevent 来作事件驱动,所以要先安装有 libevent. 官方网址:http ...

  6. linux操作系统-memcache安装

    安装配置 1. 安装libevent # tar zxf libevent-1.4.6-stable.tar.gz # cd libevent-1.4.6-stable # ./configure # ...

  7. Windows安装配置php+memcached的方法

    Windows下Memcached的安装配置方法 1.将第一个包解压放某个盘下面,比如在c:\memcached. 2.在终端(也即cmd命令界面)下输入 'c:\memcached\memcache ...

  8. Windows下memcache安装使用

    Windows下Memcache安装 随着时间的推移,网上现在能找到的在 Windows下安装 Memcache 的文档大多已经过时.雪峰这里再简要介绍一下当下最新版的安装和配置方法. Memcach ...

  9. Memcache安全配置

    Memcache安全配置 瞌睡龙 · 2014/01/20 17:59 0x00 Memcache简介 Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash ...

随机推荐

  1. Elasticsearch 监控

    导语 Elasticsearch(文中简称ES)是分布式全文搜索引擎,产品提供高可用.易扩展以及近实时的搜索能力,广泛应用于数据存储.搜索和实时分析.很多服务的可用性对ES重度依赖.因此,保障ES自身 ...

  2. GreenPlum 锁表以及解除锁定

    最近遇到truncate表,无法清理的情况,在master节点查看加锁情况,并未加锁这种情况极有可能是segment节点相关表加了锁,所以遇到这种情况除了排查master节点的锁,所有的segment ...

  3. surprise库官方文档分析(二):使用预测算法

    1.使用预测算法 Surprise提供了一堆内置算法.所有算法都派生自AlgoBase基类,其中实现了一些关键方法(例如predict,fit和test).可以在prediction_algorith ...

  4. 数据结构实验之图论九:最小生成树 (SDUT 2144)

    #include<bits/stdc++.h> using namespace std; typedef long long ll; struct node { int s, e; int ...

  5. 使用Spring Ehcache二级缓存优化查询性能

    最近在对系统进行优化的时候,发现有些查询查询效率比较慢,耗时比较长, 通过压测发现,主要耗费的性能 消耗在 查询数据库,查询redis 数据库:连接池有限,且单个查询不能消耗大量的连接池,占用大量IO ...

  6. vue日常学习

    1.$refs可以用来进行父子级间通信.ref被用于作为子组件的索引ID,用以方便的在js中直接访问子组件.用法如下parent.$refs.idname 使用方法: 在父级元素上加上ref属性 &l ...

  7. angularJs driective指令小实例

    做一个下拉菜单,体会指令各参数的作用 html代码 <script type="text/ng-template" id="mydropdown.html" ...

  8. Vue实战041:获取当前客户端IP地址详解(内网和外网)

    前言 我们经常会有需求,希望能获取的到当前用户的IP地址,而IP又分为公网ip(也称外网)和私网IP(也称内网IP),IP地址是IP协议提供的一种统一的地址格式,每台设备都设定了一个唯一的IP地址”, ...

  9. 【caffe编译】nvcc warning:The 'compute_20', 'sm_20'

    Makefile.config 中 CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \ -gencode arch=compute_20,code=s ...

  10. JAVA基础知识|Serializable

    一.序列化和反序列化 序列化:把对象转换为字节序列的过程称为对象的序列化. 反序列化:把字节序列恢复为对象的过程称为对象的反序列化. 将内存中对象的信息保存下来,可以有很多种方式实现这一功能.其中ja ...