Memcached 缓存服务器

Memcached 是高性能的分布式内存缓存服务器。
一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态web应用的速度、提高可扩展性。
主要特点:
1、C/S架构,协议简单;
2、基于libevent的事件处理(epoll);
3、Slab Allocation内存管理机制;
4、基于客户端的分布式;
 
Memcached 的安装:
yum -y install libevent-devel
wget http://www.memcached.org/files/memcached-1.4.20.tar.gz
./configure --prefix=/usr/local/memcached
make && make install
 
Memcached中保存的数据都在内存中,因此重启memcached,会导致全部数据丢失;
另外,内存容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存;
 

Memcached的限制:
1、保存的item数量没有限制,只要内存足够;
2、最长30天的数据过期时间,由常量REALTIME_MAXDELTA 60*60*24*30控制;
3、最大键长为250字节,由常量KEY_MAX_LENGTH 250控制;
4、单个item最大数据是1MB,由常量POWER_BLOCK 1048576控制;
5、最大同时连接数是200,通过conn_init中的freetotal控制;最大软连接是1024,通过settings.maxconns=1024控制;
Memcached的分布式:Consistent Hashing
memcached服务器端并没有分布式功能,因此,分布式完全依赖于客户端的实现。
客户端程序采用一致性哈希算法,为不同的键选取不同的memcached服务器进行存储。
 
Consistent Hashing算法:
1、求出memcached服务器(节点)的哈希值,并将其配置到0~2^32的圆上;
2、用同样的方法求出Key的哈希值,并映射到圆上,然后从数据映射的位置开始顺时针查找,将数据保存到找到的第一个服务器上。
 
 

一、命令行选项

1、memcached命令行选项:
 
-p          指定tcp监听端口,默认为11211
-m         最大内存大小,默认64MB
-d          作为daemon在后台启动
-vv          very verbose模式启动, 调试信息和错误信息输出到控制台
-f          指定Growth Factor,默认1.25
-M          禁用LRU,内存耗尽后返回错误
-c          最大并发连接数,默认1024
-u          指定username(仅在以root启动进程时)
-P          指定pid文件路径
 
例如,以守护进程启动memcache
./memcached -d -m 10 -u root -l 127.0.0.1 -p 12000 -c 256 -P /tmp/memcached.pid 
 
2、客户端连接到memcached服务器:
telnet 127.0.0.1 12000 
(输入quit命令退出连接)
 
 

二、命令格式

常用命令

命令 命令说明
存储命令(格式如下)
set
向缓存添加新的键值对,若键已经存在,则替换之
add
仅当缓存中不存在键时,才向缓存添加一个键值对;如果key已存在,操作失败
replace
仅当键已存在时,才会替换缓存中的键;如果key不存在,操作失败
append 在已有的缓存数据后添加,如果key不存在,返回NOT_STORED
prepend
与append类似,但是在缓存前添加数据
cas
checked and set的意思,只有当最后一个参数和gets所获取的参数匹配时才能存储,否则返回“EXISTS”
incr 
自增,incr key value,对数字型value自增一个值
decr
自减
   
读取命令
get 查找键,比如 get key1, key2 ...
gets gets命令比普通的get命令多返回了一个数字,这个数字可以检查数据是否发生改变
delete 删除键
 flush_all  清空cache
状态命令
stats 查看memcached服务器基本状态
stats cachedump slab_id limit_num  

 存储命令的格式

<command name> <key> <flags> <exptime> <bytes>
<data block>

参数说明:

<command name> set/add/replace
<key> 查找关键字
<flags> 客户机使用它存储关于键值对的额外信息
<exptime> 该数据的存活时间,0表示永不过期
<bytes> 存储字节数
<data block> 存储的数据块(可直接理解为key-value结构中的value)

例子1:

三、Memcached内存管理机制

Memcached的内存管理机制:Slab Allocation
1、将分配的内存分割成各种尺寸的块(chunk),并把尺寸相同的块分成组(chunk的集合)==>解决内存碎片问题
memcached在启动时指定Growth Factor因子(-f选项),就可以控制slab之间的差异,默认值为1.25。
2、分配到的内存不会释放,而是重复利用==>避免频繁的调用malloc和free
3、Memcached根据收到的数据大小,选择最适合数据大小的slab。
 
                            
 
几个概念术语:
Page:分配给Slab的内存空间,默认是1MB;
Chunk:用于缓存记录的内存空间;
Slab Class:特定大小的chunk的组;
 
 
Lazy Expiration:memcached内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。
记录超时后,memcached也不会释放已分配的内存,而是将其标记为可重用。
LRU:当内存空间不足时(无法从slab class获取到新空间),就从最近未被使用的记录中搜索,并将其空间分配给新纪录。

memcached 缓存服务器的更多相关文章

  1. Linux下使用Magent+Memcached缓存服务器集群部署

    1.编译安装libevent  cd /root/soft_hhf/  wget http://cloud.github.com/downloads/libevent/libevent/libeven ...

  2. Memcached 缓存服务器介绍

    1.memcached  高性能分布式内存对象缓存系统 2.目的:减轻数据库负载,提高基于动态数据库驱动网站的响应速度 3.数据格式:文本行 4.协议:memcache协议 5.存储方式:hashMa ...

  3. 第34 memcached缓存

    1.缓存数据库 缓存:将数据存储在内存中,只有当磁盘胜任不了的时候,才会启用缓存. 缺点:断电数据丢失(双电),用缓存存储数据的目的只是为了应付大并发的业务,至于数据存储及可靠性不要找他了.   数据 ...

  4. 二、NOSQL之Memcached缓存服务实战精讲第一部

    1.Memcached是一套数据缓存系统或软件. 用于在动态应用系统中缓存数据库的数据,减少数据库的访问压力,达到提升网站系统性能的目的:Memcached在企业应用场景中一般是用来作为数据库的cac ...

  5. memcached基于socket访问memcache缓存服务器

    memcached基于socket访问memcache缓存服务器 操作memcache常用三种方法: .memcache基于php_memcache.dll扩展(php扩展) .memcached基于 ...

  6. 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)

    Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...

  7. 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)

    硬盘和内存的作用是什么 硬盘的作用毫无疑问我们大家都清楚,不就是用来存储数据文件的么?如照片.视频.各种文档或等等,肯定也有你喜欢的某位岛国老师的动作片,这个时候无论我们电脑是否关机重启它们永远在那里 ...

  8. .NET跨平台之旅:基于.NET Core改写EnyimMemcached,实现Linux上访问memcached缓存

    注:支持 .NET Core 的 memcached 客户端 EnyimMemcachedCore 的 NuGet 包下载地址:https://www.nuget.org/packages/Enyim ...

  9. Django分析之使用redis缓存服务器

    时间长没有更新了,这段时间一直忙着一个项目,今天就记录一个现在经常会用到的技术吧. redis相信大家都很熟悉了,和memcached一样是一个高性能的key-value数据库,至于什么是缓存服务器, ...

随机推荐

  1. OpenGL2.0及以上版本中glm,glut,glew,glfw,mesa等部件的关系

    OpenGL2.0及以上版本中gl,glut,glew,glfw,mesa等部件的关系 一.OpenGL OpenGL函数库相关的API有核心库(gl),实用库(glu),辅助库(aux).实用工具库 ...

  2. 在ASP.Net和IIS中删除不必要的HTTP响应头

    引入 每次当浏览器向Web服务器发起一个请求的时,都会伴随着一些HTTP头的发送.而这些HTTP头是用于给Web服务器提供一些额外信息以便于处理请求.比如说吧.如果浏览器支持压缩功能,则浏览器会发送A ...

  3. ThinkPHP项目CMS内容管理系统开发视频教程【20课】(3.02GB)

    ThinkPHP背景介绍:     ThinkPHP是一个免费开源的,快速.简单的面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业级应用开发而诞生的. ...

  4. 网络最大流问题之Ford-Fulkerson算法原理详解

    前言 最大流问题是网络优化中典型的问题,用形象的语言来描述就是在满足容量约束的前提下将尽可能多的流从源节点(始点)到汇节点(终点).解决此问题的经典方法很多,本文介绍广为人熟知的Ford-Fulker ...

  5. 足球运动训练心得及经验分析-c语言学习调查

    在准备预备作业02之前,我参考娄老师的提示,阅读了<[做中学(Learning By Doing)]之乒乓球刻意训练一年总结>一文. 在文章描述的字里行间,给予我的印象是系统.负责,娄老师 ...

  6. 关于app的清除缓存的功能

    一直寻寻觅觅找app的清除缓存的方法,发现:并没有什么固定的方法,你既然有做对应的缓存机制,这个机制就应该有清除缓存的方法.例如如果你使用某个第三方的图片库,这个库有缓存机制,那么它就应该提供对应的清 ...

  7. 深入探索Java 8 Lambda表达式

    2014年3月,Java 8发布,Lambda表达式作为一项重要的特性随之而来.或许现在你已经在使用Lambda表达式来书写简洁灵活的代码.比如,你可以使用Lambda表达式和新增的流相关的API,完 ...

  8. WP&Win10仿微信消息框代码分享

    上次分享了幸运转盘的源码,感觉小伙伴们很喜欢:这次和大家分享下通信相关部分需要用到的类似微信的消息框代码,有需要的童鞋可以拿去用哟.自己尝试写的,可能有点low,勿喷呀! 希望以后有好的东西大家都分享 ...

  9. 初探Asp.net5

    说到Asp.net 5,确实让我有种激动的心情,微软的全力大招在一波一波的发出,也在牵动着每一个程序员的心.作为你们中的一员,在每次看到微软的新技术时,都满怀一种激动的心情,也同时希望微软在开源和跨平 ...

  10. mysql使用基础 sql语句(一)

    csdn博文地址:mysql使用基础 sql语句(一)  点击进入 命令行输入mysql -u root -p,回车再输入密码,进入mysql. 终端命令以分号作为一条语句的结束,可分为多行输入,只需 ...