memcached 中有两张hash 表,一个是“主hash 表”(primary_hashtable),另外一个是“原hash 表”(old_hashtable).一般情况下都在主表中接受操作,在插入新item时判断是否需要进行扩:每次操作的时候,先会检测表是否正处于扩展(expanding)状态,如果是,则原表中进行操作,当扩容完成在转移到主表中进行操作. 在扩容时,采取逐步迁移策略:即每次只从原表中迁移一个bucket节点的item到新主表中,进行逐步迁移. 总的来看,这与Redis中的h…
分布式缓存系统 Memcached整体架构 Memcached经验分享[架构方向] Memcached 及 Redis 架构分析和比较…
上节在分析slab内存管理机制时分析Memcached整个Item存储系统的初始化过程slabs_init()函数:分配slabclass数组空间,到最后将各slab划分为各种级别大小的空闲item并挂载到对应大小slab的空闲链表slots上.本节将继续分析对slab和item的主要操作过程. slab机制中所采用的LRU算法: 在memcached运行过程中,要把一个item调入内存,但内存已无空闲空间时,为了保证程序能正常运行,系统必须从内存中调出一部分数据,送磁盘的对换区中.但应将哪些数…
缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵活.此时Memcached或许是你想要的. Memcached是什么? Memcached是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度. Memcached能缓存什么? 通过在内存里维护一个统一的巨大的hash表,Me…
缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵活.此时Memcached或许是你想要的. Memcached是什么?Memcached是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度. Memcached能缓存什么?通过在内存里维护一个统一的巨大的hash表,Memc…
转自:http://blog.csdn.net/devgis/article/details/8212917 缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵活.此时Memcached或许是你想要的. Memcached是什么?Memcached是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少…
缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵活.此时Memcached或许是你想要的. Memcached是什么? Memcached是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度. Memcached能缓存什么? 通过在内存里维护一个统一的巨大的hash表,Me…
个人网站:http://www.51pansou.com memcached视频下载:memcached视频教程 memcached源码下载:memcached源码 Memcached是什么? Memcached是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度. Memcached能缓存什么? 通过在内存里维护一个统一的巨大的hash表,Memcached能够用来存储各种格式的数据,包括图像.视频.文件以及数据库检索的…
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. 站下的session性能并不高,所以造成人们一种印象,大型WEB项目使用Java的错觉,致使很多人吐槽微软不给力,其实这好比拉不出怪地球引力,本…
以下注释的源代码都在memcached项目的assoc.c文件中 /* how many powers of 2's worth of buckets we use */ unsigned int hashpower = HASHPOWER_DEFAULT; /* 哈希表bucket的级别,(1<<hashpower) == bucket的个数 */ /* Main hash table. This is where we look except during expansion. */ /*…
Memcached 是一个高性能的分布式内存对象缓存系统.用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来降低读取数据库的次数,从而提高动态.数据库驱动站点的速度. Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的.可是client能够用不论什么语言来编写,并通过memcached协议与守护进程通信. 站下的session性能并不高,所以造成人们一种印象,大型WEB项目使用JAVA的错觉,致使非常多人吐槽微软不给力,事实上这好比拉不…
Memcached 是一个分布式的缓存系统, 但是 Memcachd 到底是什么意思,有什么作用呢?缓存一般用来保存一些经常被存取的数据和资源(例如:浏览器会将访问过的网页会话缓存起来),因为通过缓存来存取数据要比从磁盘存取同样的数据要快得多.所以 Memcached 顾名思义,意味着 “内存缓存”,所有缓存的内容都在服务器的内存中.内存中的这些缓存数据可以通过 API 的方式被存取.数据是以 key/value 的配对方式存在的,就像一像大的 Hash 表. 分布式是 Memcached 的主…
缓存数据以item为基本单元,以双链表形式存放在对应级别大小的slabclass结构的chunk中.同时该item还存放在链式hashtable中bucket中,用于提供快速查找的索引. 首先是理解缓存的基本数据单元item结构: typedef struct _stritem {    struct _stritem *next;    //在slab中的双链表后向指针    struct _stritem *prev;    //在slab中的双向链表的前向指针    struct _str…
Memcached介绍   官网地址      Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据库驱动网站的速度. Memcached 顾名思义,意味着 “内存缓存”,所有缓存的内容都在服务器的内存中.内存中的这些缓存数据可以通过 API 的方式被存取.数据是以 key/value 的配对方式存在的,就像一个很大的 Hash 表.     Memcached安装/运行 Memcac…
首先对状态机中的各种状态做个简单总结,具体可见状态转换示意图: 1.listening:这个状态是主线程的默认状态,它只有这一个状态:负责监听socket,接收客户连接,将连接socket派发给工作线程. 2.conn_new_cmd:每个工作线程的接收到新连接的初始状态,为处理该连接socket准系列准备工作:如清空读写buf等. 3.conn_waiting:当读缓冲区无数据可以处理时,工作线进入等待状态:在event_base中注册读事件,然后状态机暂停,挂起当前connection(函数…
在前面slab数据存储部分分析了Memecached中记录数据的具体存储机制,从中可以看到所采用的内存管理机制——slab内存管理,这也正是linux所采用的内存高效管理机制,对于Memchached这样的内存cache服务器,内存高效管理是其最重要的任务之一. Linux 所使用的 slab 分配器的基础是 Jeff Bonwick 为 SunOS 操作系统首次引入的一种算法.Jeff 的分配器是围绕对象缓存进行的.在内核中,会为有限的对象集(例如文件描述符和其他常见结构)分配大量内存.Jef…
为了方便测试,给出一个C客户端libmemcached链接:https://launchpad.net/libmemcached/ 以及memcacheclient-2.0 : http://code.jellycan.com/files/memcacheclient-2.0.zip(已生成 sln,在windows下直接用VS打开,编译成功) 在Memcached启动时,有很多配置参数可以选择,以下参数对应memcached1.4.15,现给出这些参数的具体含义: "a:" //un…
Memcached采用典型的Master-Worker模式,其核心思想是:有Master和Worker两类进程(线程)协同工作,Master进程负责接收和分配任务,Worker进程负责处理子任务.当各Worker进程将各个子任务处理完成后,将结果返回给Master进程,由Master进程做归纳和汇总. 工作示意图如下所示: 其中每个工作线程维护一个连接队列,以接收由主线程分配的客户连接:同时每个工作线程维护一个Libevent实例,以处理和主线程间的管道通信以及和客户连接间的socket通信事件…
Memcached在.NET中的应用 一.Memcached服务器端的安装(此处将其作为系统服务安装) 下载文件:memcached 1.2.1 for Win32 binaries (Dec 23, 2006) 下载地址:http://jehiah.cz/projects/memcached-win32/files/memcached-1.2.1-win32.zip 1.解压缩文件到c:\memcached 2.命令行输入 c:\memcached\memcached.exe -d insta…
Memcached在1.2.4版本后新增了CAS(Check and Set)协议,主要用于并发控制:memcached中同一个item同时被多个线程(多个客户端)更改的并发问题.CAS协议最本质的东西——版本号,即将每个item都关联一个全局唯一的编号,从而利用该唯一的编号来判断item数据在某个线程操作期间有无被其他的线程所更改(每次更改版本号都会改变,因此可作为判断的标识). 如果不采用CAS,则有如下的情景:第一步,A取出数据对象X: 第二步,B取出数据对象X: 第三步,B修改数据对象X…
上节已经分析到了主线程中监听socket注册事件和工作线程中连接socket注册事件的回调函数都是event_handler,且event_handler的核心部分都是一个有限状态机:drive_machine.因此接下来将对该状态机具体的业务处理进行深入的剖析. memcached将每个socket都封装为一个conn结构体,该结构体包含了比如socket的文件描述符sfd.注册事件event.连接状态结构体conn_states,等等诸多信息字段,其中的状态结构:conn_states中包含…
在前面工作线程初始化的分析中讲到Memcached采用典型的Master_Worker模式,也即半同步/半异步的高效网络并发模式.其中主线程(异步线程)负责接收客户端连接,然后分发给工作线程,具体由工作线程完成客户端的求情任务. 在memcached中,主线程负责监听所有socket上的事件,当socket上有可读事件发生,即新的客户连接求情到来,主线程就接受之得到新的连接socket,并将该连接socket信息放入一个任务对象(CQ_ITEM)结构体中,然后选择一个工作线程,将该CQ_ITEM…
整个状态机的基本流程如下图所示,后续分析将按该流程来进行. 接上节分解,主线程将接收的连接socket分发给了某工作线程,然后工作线程从任务队列中取出该连接socket的CQ_ITEM,开始处理该连接的所有业务逻辑.这个过程也就是上图中的第一个状态conn_listening. 而工作线程首先进入的状态就是conn_new_cmd,即为这个新的连接做一些准备工作,如清理该连接conn结构的读缓冲区等. 准备状态conn_new_cmd具体分析如下: {  <span style="font…
前两节中对工作线程的工作流程做了较为详细的分析,现把其主要流程总结为下图: 接下来本节主要分析主线程相关的函数设计,主函数main的基本流程如下图所示: 对于主线程中的工作线程的初始化到启动所有的工作线程前面已经做了分析,后面的创建监听socket.注册监听socket的libevent事件.启动主线程的libevent事件循环,就是接下来的内容了. 其中主要调用的函数是server_sockets,该函数从配置参数setting.inner字符串中依次提取出一个ip或者一个hostname(一…
Memcache 分布式缓存系统部署与调试 工作机制:通过在内存中开辟一块区域来维持一个大的hash表来加快页面访问速度,和数据库是独立的;目前主要用来缓存数据库的数据;存放在内存的数据通过LRU算法进行淘汰出内存;同时可以通过删除和设置失效时间来淘汰存放在内存的数据. 一 memcache 安装 1 memcached 服务器安装1.1 memcached 官方网站 http://memcached.org/ 目前最新稳定版本 memcached-1.4.10.tar.gz 1.2 memca…
Memcached — 分布式缓存系统 1.Memcached是什么? Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度.Memcached通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像.视频.文件以及数据库检索的结果等.Memcached由Danga Interactive最初为了加速 LiveJournal网站访问速度而开发的,后来被很多大型的网站采用.起初作者编写它可能是为了提高动态网页应用,为了减轻数…
Memcached 是什么? Memcached是一种集中式Cache,支持分布式横向扩展.这里需要解释说明一下,很多开发者觉得Memcached是一种分布式缓存系统,但是其实Memcached服务端本身是单实例的,只是在客户端实现过程中可以根据存储的主键做分区存储,而这个区就是Memcached服务端的一个或者多个实例,如果将客户端也囊括到Memcached中,那么可以部分概念上说是集中式的.其实回顾一下集中式的构架,无非两种情况:一是节点均衡的网状(JBoss Tree Cache),利用J…
分布式缓存BeIT Memcached简介 或许你还没有用到过分布式缓存,在web集群的情况下,它可以很好的让一部分常用数据常驻服务器内存而不用担心各台web不同步.下面稍微介绍一下beitmemcached对于.net的支持,官方参考http://code.google.com/p/beitmemcached/ 一个完整的操作步骤:1.点击上面页面的downloads,把Memcached_1.2.5.zip 和BeITMemcached_source_2008_05_31.zip两个压缩包下…
NCache:最新发布的.NET平台分布式缓存系统在等待Microsoft完成Velocity这个.NET平台下的分布式内存缓存系统的过程中,现在让我们将目光暂时投向其他已经有所建树的软件开发商.Alachisoft和它的NCache便是其中之一.目前Alachisoft同时提供了一个免费的和一个付费的版本,并且今后也将支持NHibernate. 尽管已经可以在产品环境中使用,不过NCache Express版本还是对功能进行了限制.每个缓存区域的最大尺寸被限制到500MB,而且只能被复制到两个…
Memcached概述   什么是Memcached? 先看看下面几个概念: Memory:内存存储,不言而喻,速度快,对于内存的要求高,不指出的话所缓存的内容非持久化.对于CPU要求很低,所以常常采用将Memcached服务端和一些CPU高消耗Memory低消耗应用部属在一起. Cache:在ASP.NET中已经可以实现对页面局部进行缓存,而使用Memcached的缓存比 ASP.NET的局部缓存更加灵活,可以缓存任意的对象,不管是否在页面上输出.ASP.NET的缓存是基于本地(单机)的,受到…