Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。

memcached是一套分布式的快取系统,当初是Danga Interactive为了LiveJournal所发展的,但目前被许多软件(如MediaWiki)所使用。这是一套开放源代码软件,以BSD license授权释出。[1]   memcached缺乏认证以及安全管制,这代表应该将memcached服务器放置在防火墙后。[1]   memcached的API使用三十二位元的循环冗余校验(CRC-32)计算键值后,将资料分散在不同的机器上。当表格满了以后,接下来新增的资料会以LRU机制替换掉。由于memcached通常只是当作快取系统使用,所以使用memcached的应用程式在写回较慢的系统时(像是后端的数据库)需要额外的程式码更新memcached内的资料[1]   memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、网站显示延迟等重大影响。   这时就该memcached大显身手了。memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。   Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站更快的运行速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。但是它并不提供冗余(例如,复制其hashmap条目);当某个服务器S停止运行或崩溃了,所有存放在S上的键/值对都将丢失。   Memcached由Danga Interactive开发,其最新版本发布于2010年,作者为Anatoly Vorobey和Brad Fitzpatrick。用于提升LiveJournal . com访问速度的。LJ每秒动态页面访问量几千次,用户700万。Memcached将数据库负载大幅度降低,更好的分配资源,更快速访问。

特征  memcached作为高速运行的分布式缓存服务器,具有以下的特点。   · 协议简单   · 基于libevent的事件处理   · 内置内存存储方式   · memcached不互相通信的分布式
协议
  memcached的服务器客户端通信并不使用复杂的XML等格式,而使用简单的基于文本行的协议。   因此,通过telnet也能在memcached上保存数据、取得数据。下面是例子。   $ telnet localhost 11211   Trying 127.0.0.1...   Connected to localhost.localdomain (127.0.0.1).   Escape character is '^]'.   set foo 0 0 3 (保存命令)   bar (数据)   STORED (结果)   get foo (取得命令)   VALUE foo 0 3 (数据)   bar (数据)
事件处理
  libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能封装成统一的接口。即使对服务器的连接数增加,也能发挥O(1)的性能。memcached使用这个libevent库,因此能在Linux、BSD、Solaris等操作系统上发挥其高性能。关于事件处理这里就不再详细介绍,可以参考Dan Kegel的The C10K Problem。
存储方式
  为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。
通信分布式
  memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。各个memcached不会互相通信以共享信息。那么,怎样进行分布式呢?这完全取决于客户端的实现。本文也将介绍memcached的分布式。功能  一个用PHP编写的可视化的MemCached管理系统   MemAdmin是一款可视化的Memcached管理与监控工具,使用PHP开发,体积小,操作简单。   主要功能:   服务器参数监控:STATS、SETTINGS、ITEMS、SLABS、SIZES实时刷新   服务器性能监控:GET、DELETE、INCR、DECR、CAS等常用操作命中率实时监控   支持数据遍历,方便对存储内容进行监视   支持条件查询,筛选出满足条件的KEY或VALUE   数组、JSON等序列化字符反序列显示   兼容memcache协议的其他服务,如Tokyo Tyrant (遍历功能除外)   支持服务器连接池,多服务器管理切换方便简洁使用技巧  许多语言都实现了连接memcached的客户端,其中以Perl、PHP为主。仅仅memcached网站上列出   的语言就有   · Perl   · PHP   · Python   · Ruby   · C#   · C/C++   · Lua   等等。   如何使用memcached-Server端   在服务端运行:   # ./memcached -d -m 2048 -l 10.0.0.40 -p 11211   这将会启动一个占用2G内存的进程,并打开11211端口用于接收请求。由于32位系统只能处理4G内存的寻址,所以在大于4G内存使用PAE的32位服务器上可以运行2-3个进程,并在不同端口进行监听。   如何使用memcached-Client端   在应用端包含一个用于描述Client的Class后,就可以直接使用,非常简单。   PHP Example:   $options["servers"] = array("192.168.1.41:11211", "192.168.1.42:11212");   $options["debug"] = false;   $memc = new MemCachedClient($options);   $myarr = array("one","two", 3);   $memc->set("key_one", $myarr);   $val = $memc->get("key_one");   print $val[0]."\n"; // prints 'one‘   print $val[1]."\n"; // prints 'two‘   print $val[2]."\n"; // prints 3版本发布  2012年02月03日,Memcached 1.4.13 发布。[2]   2012年08月02日,Memcached 1.4.14 发布。[3]   2012年09月05日,Memcached 1.4.15 发布。[4]

memcachedb-持久化存储的缓存系统
memcachedb故名思义就是 memcached + bdb,是基于memcached Socket层和berkeley-db存储层结构的实现, 是新浪互动社区技术团队2007年的一项重大的技术成果,现在应用于新浪互动社区多个产品线中,其中包括新浪博客等重头产品。能够实现任意memcache api的调用、数据实时落地以及主辅实时备份。

选择memcachedb:没 有什么特殊的原因,我们有最好的理由就是,在做到最大不牺牲数据读、写性能的前提下,我们能够让您原来存储在memcache里的数据不再遭受系统宕机或 者系统掉电而丢失,即使服务器电源爆炸了,只要硬盘还能够正常工作,换到另外一台服务器上,您的数据依然安然无恙地在硬盘上。

性能:我们做过小数据测试,小数据(几十个字节)数据的读写,每秒钟并发能够维持在5000+(单块146Scis硬盘,CPU和内存配置几乎可以忽略因为这不是性能瓶颈)。基本上满足所有互联网高效存储的应用。

应用场合:需 要频繁读写的小数据。例如数字类服务就像点击数,需要频繁写入小数据的例如评论系统,需要记录用户状态的例如在线人数以及在线用户等等。当然,如果您想用 来存储单笔超过10K以上的数据,例如新闻或者文章或者论坛帖子也可以,但是我们没有尝试过,如果您真的用来这样子玩了,可以反馈给我。

数据备份&&读写分离:memcachedb支持主辅实时无差异同步,配置主服务和辅服务仅仅需要很短的一条启动命令。当然,您也可以利用这一便利特性来实现读写分离,那样子会让您的系统更加的高效。

稳定性:memcachedb目前被应用于新浪互动社区多个产品线中,具有钢铁般的品质。

缺点:memcached不支持内存对象的遍历操作,当然更加不能支持复杂的查询操作,只能支持根据已知的key去查询对应的value。但后续我会介绍另外一个东东memcache_engine,它为mysql提供了一个memcached引擎。

一、安装
直接在memcached-1.2.2.tar.gz找到INSTALL文件,按照步骤安装就行了。很简单。

二、启动
#第一种,读写合并模式,即不做辅拷贝,即读又写,不做冗余备份
memcachedb -p21211 -d -r -u root -H /data/mdb_11211 -N

#第二种,读写分离/备份模式
#主服务器 192.168.0.1 读写监听 11211 ,同步通过31211的端口完成,不占用繁忙的主服务端口
memcachedb -p21211 -d -r -u root -H /data/mdb_11211_m -N -R 127.0.0.1:31211 -M

# 辅服务器 192.168.0.2 只读监听 21212,从192.168.0.1 的 31211端口同步数据,同时再开一个31212端口对外提供数据同步服务
memcachedb -p21212 -d -r -u root -H /data/mdb_11211_from_16801_s -O 192.168.0.1:31211 -R 192.168.0.2:31212 -S

memcachedb-持久化存储的缓存系统的更多相关文章

  1. 持久化存储与HTTP缓存

    本文主要学习一下一些高级的HTTP知识,例如Session LocalStorage Cache-Control Expires ETag 其实主要就是涉及到了持久化存储与缓存的技术 在此之前已经学习 ...

  2. Memcache 内存对象缓存系统

    简介: Memcached 是一个高性能的分布式内存存储对象缓存系统,用于动态 WEB 应用以减轻数据库负载. 它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据库驱动网站的速度. ...

  3. Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析

    mongodb和memcached不是一个范畴内的东西.mongodb是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据.mongodb和memcached不存在谁替换谁的问题. 和 ...

  4. Memcached 数据缓存系统

    Memcached 数据缓存系统 常用命令及使用:http://www.cnblogs.com/wayne173/p/5652034.html Memcached是一个自由开源的,高性能,分布式内存对 ...

  5. 高性能的分布式内存对象缓存系统Memcached

    Memcached概述   什么是Memcached? 先看看下面几个概念: Memory:内存存储,不言而喻,速度快,对于内存的要求高,不指出的话所缓存的内容非持久化.对于CPU要求很低,所以常常采 ...

  6. Memcached 分布式缓存系统部署与调试

    Memcache 分布式缓存系统部署与调试 工作机制:通过在内存中开辟一块区域来维持一个大的hash表来加快页面访问速度,和数据库是独立的;目前主要用来缓存数据库的数据;存放在内存的数据通过LRU算法 ...

  7. Redis持久化存储(AOF与RDB两种模式)

    Redis中数据存储模式有2种:cache-only,persistence; cache-only即只做为“缓存”服务,不持久数据,数据在服务终止后将消失,此模式下也将不存在“数据恢复”的手段,是一 ...

  8. ios持久化存储

    前言 iOS中常用的持久化存储方式有好几种: 偏好设置(NSUserDefaults) plist文件存储 归档 SQLite3 Core Data 沙盒 每个iOS应用都有自己的应用沙盒(应用沙盒就 ...

  9. Redis持久化存储详解(一)

    > 为什么要做持久化存储? 持久化存储是将 Redis 存储在内存中的数据存储在硬盘中,实现数据的永久保存.我们都知道 Redis 是一个基于内存的 nosql 数据库,内存存储很容易造成数据的 ...

随机推荐

  1. C++11模板的别名

    [C++模板的别名] 参考:http://zh.wikipedia.org/wiki/C++0x#.E6.A8.A1.E6.9D.BF.E7.9A.84.E5.88.A5.E5.90.8D

  2. Array types are now written with the brackets around the element type

    因为网站翻译的时候应该用的beta/beta2,而再beta4中就会出现问题,解决问题方案: var shopping: String[] = ["Eggs","Milk ...

  3. 使用MSSQL,连接oracle,对oracle数据进行操作

    EXEC sp_addlinkedserver--创建链接服务器.链接服务器让用户可以对 OLE DB 数据源进行分布式异类查询. @server = 'Mktg',--要创建的链接服务器的名称.s ...

  4. JQuery中attr ,html,text,val,的一些用法

    attr:主要获取元素内部的属性,返回 的是属性值 html:返回当前元素(不包括他自己本身的标签,但是可以返回他自己的)的标签加上内容.仅限于返回第一个. text:和 .html() 方法不同, ...

  5. Codeforces 711 C. Coloring Trees (dp)

    题目链接:http://codeforces.com/problemset/problem/711/C 给你n棵树,m种颜色,k是指定最后的完美值.接下来一行n个数 表示1~n树原本的颜色,0的话就是 ...

  6. C#上位机读数据库

    string connectionString = string.Format("server=(local);uid=sa;pwd=1234567890;database=msp430&q ...

  7. Jackson 高性能的JSON处理 ObjectMapper

    http://blog.csdn.net/wangyang2698341/article/details/8223929 今天自行研究了下json ,感觉非常好用,经过测试比google的GSON快多 ...

  8. linux的webserver配置与管理——创建用户个人主页

    本实验用的是RedHat linux9.0,在虚拟机上进行操作,它已具有相当完好的可视化界面,这样用户会更加easy接受和理解. 首先呢就是虚拟机的相关配置,这个就不说了,当我们安装完系统后,打开终端 ...

  9. constraint使用方法总结

    主要就是添加约束的 下面几种约束 .并 一一列举: 1.主键约束: 要对一个列加主键约束的话,这列就必需要满足的条件就是分空 由于主键约束:就是对一个列进行了约束,约束为(非空.不反复) 下面是代码  ...

  10. jQuery循环滚动新闻列表

    最近由于项目原因,学习了下jquery,实现了一个小小的功能,就是点击公告的上一条下一条来查看滚动条.具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DT ...