Memcached 原理和使用详解

合集下载

Memcached使用及原理

Memcached使用及原理
Memcached使用及原理
研发管理部 陈海涛 2011-06-10
2014-6-25
1
什么是Memcached
Memcached是(运营LiveJournal的技术团队)开发的一套分布式内存对象
缓存系统。常用于减少数据库负载,提升性能。 社区网站主页:/ 开发团队主页:/ 项目主页:/
结果:老数据留在尾部(tail)。
2014-6-25 © 2004 - 2010 UC Mobile
16
Set时LRU
set时要为当前key分配内存 先从本slab队尾检查是否有过期数 据,共检查50条。
是否查到过期数据, 查到则淘汰1条后中止。 NO 新分配内存是否OK (是否还有可用内存)? NO 是否设置了-M参数表示不能踢 出有效数据 YES NO YES 内存分配失 败,返回出错 YES
2014-6-25 © 2004 - 2010 UC Mobile
7
分布式-客户端实现
2014-6-25 © 2004 - 2010 UC Mobile
8
分布式-一致性hash
2014-6-25 © 2004 - 2010 UC Mobile
9
内存管理-术语
2014-6-25 © 2004 - 2010 UC Mobile
2014-6-25 © 2004 - 2010 UC Mobile
6
常用优化参数
-f <factor> chunk size的增长因子(合理范围 1.05~2,默认:1.25) -t <num> memcached启动的工作线程数,默 认为4,建议不要超过系统CPU的个数。 -I <num>[k|K|m|M] 改变slab page的容量 大小,以调整ITEM容量的最大值,默认为1MB。 不能少于1024bytes(即1K),不能大 于128MB。memcached不推荐大于1MB。

memcached原理

memcached原理

memcached原理Memcached是一种分布式内存对象缓存系统,常常被用于动态Web 应用中减轻数据库负载。

它将数据存储在内存中,并通过哈希算法对其进行管理,应用程序可以直接从内存中读取缓存数据,达到加速访问的目的。

Memcached的运行原理:它使用一个客户端-服务端的架构模型,其中客户端与服务器之间通过TCP/IP协议进行通信。

使用者需要将需要存储的key-value对发送到Memcached服务器,然后服务器将这些数据存储在内存中,当调用者需要获取相应的数据时,直接从内存中读取。

如果数据不存在,Memcached将返回一个空响应。

Memcached的特点:1.高速缓存:Memcached是内存中的缓存系统,访问速度非常快;2.内存管理:Memcached使用LRU算法释放内存中不在使用的数据;3.可扩展:Memcached可以非常容易的扩展。

为什么要使用Memcached?1.加速访问:Memcached非常适合访问频繁但数据变化不步的情况,通过加速访问可以提高网站的响应速度。

2.降低数据库压力:将一部分数据放入Memcached缓存中,当这些数据正在使用时,可以减轻数据库的负载,提高数据库的性能。

3.可扩展性:通过横向扩展,可以使Memcached轻松适应大量数据的存储要求,同时保持高速缓存的性能。

如何使用Memcached?1.安装配置:将Memcached服务器安装在适当的机器上,并根据需要进行相应的配置。

2.使用客户端:可以使用各种语言的客户端库来使用Memcached,包括PHP,Python,Java等。

3.使用API调用:通过API直接从客户端调用Memcached提供的方法来获取需要的数据。

总之,Memcached是一个非常实用的高速缓存系统,可以用于加速Web应用程序的访问,并降低数据库的负载。

它的运行原理简单易懂,安装和配置也非常容易,是一个非常值得使用的缓存系统。

memcached 手册

memcached 手册

memcached 手册Memcached是一个高性能的开源内存对象缓存系统,被广泛地应用于提升网站和应用程序性能。

该手册将介绍Memcached的基本概念、安装配置、常用命令以及最佳实践等关键内容,旨在帮助读者快速了解和使用Memcached。

一、Memcached概述Memcached可以看作是一个分布式的缓存系统,它将数据缓存在内存中,并提供了简单的键值对存取接口。

相比于传统的关系型数据库,Memcached具有更快的读写速度和更高的并发能力,因为它直接操作内存而避免了磁盘I/O。

此外,Memcached采用了多台服务器的分布式架构,能够提供横向扩展的能力。

二、安装与配置1.下载和安装:Memcached可以从官方网站或其他镜像站点下载安装包,并根据相应平台的指引进行安装。

安装完成后,可以通过运行"memcached"命令来启动Memcached服务。

2.配置文件:Memcached的默认配置文件是"memcached.conf",可以通过修改该文件中的参数来调整Memcached的行为。

主要的配置项包括监听端口、最大连接数、内存容量等。

三、常用命令1.存储数据:用"set"命令可以将键值对存入Memcached中,例如:"set key 0 3600 5"表示存储一个key为"key",值为"0",并设置过期时间为3600秒。

如果要存储的值超出了内存容量限制,旧的数据将会被替换。

2.获取数据:用"get"命令可以从Memcached中获取指定键对应的值,例如:"get key"可以获取到之前存储的值。

如果该键不存在,返回结果将是"END"。

3.删除数据:用"delete"命令可以从Memcached中删除指定键对应的值,例如:"delete key"可以删除之前存储的值。

Memcached 原理剖析

Memcached 原理剖析

余问题都解决了,空间利用率会大大提升。
修改 slabs_clsid 函数,让它直接返回一个定值(比如 1 )
unsigned int slabs_clsid(size_t size) {return 1;}
修改slabs_init函数,去掉循环创建所有classid属性的部分,直接添加
slabclaபைடு நூலகம்s[1]:
• 数据存储方式:Slab Allocation • 数据过期方式:Lazy Expiration + LRU
7
Memcache原理分析
数据存储方式:Slab Allocation
Slab Alloction 构造图
Slab Allocator的基本原理是按照预先 规定的大小,将分配的内存分割成特定 长度的块,以完全解决内存碎片问题。
Memcached 入门
作者:
2009-01
Tech Talk 目录索引
Memcache是什么 Memcache,ehcache的比较 Memcache原理分析 Memcache安装和基本配置 Memcache的在大型网站中的使用策略 Memcache的一些经验和技巧 Memcache一致性算法(consistent hasing)
一个id,在数据量非常大的情况下,slab链会很长(因为所有数据都挤在一条
链上了),遍历起来的代价比较高。
前面介绍了三种空间冗余,设置chunk长度等于item长度,解决了第一种空间
浪费问题,不预申请空间解决了第二种空间浪费问题,那么对于第一种问题
(slab内剩余)如何解决呢,这就需要修改POWER_BLOCK常量,使得每一
15
Memcache原理分析:

memcached内存分配机制

memcached内存分配机制

师德之光教育的温情与力量演讲稿尊敬的各位领导、亲爱的同事们:大家好!今天,我站在这里,带着满腔的热情和对教育事业的无限敬意,与大家分享一个关于爱与滋养的故事。

在教育的花园里,有这样一位园丁,她用27年的光阴,精心培育着每一棵幼苗,让他们在阳光和雨露中茁壮成长。

她用智慧和爱心,为孩子们驱散寒冷,滋润心灵。

她,就是我们实验小学的阙校长——孩子们心中的天使,家长们眼中的福音,我们实小人的骄傲。

我坚信,师德的光辉应该从教师的一言一行中闪耀;美育的魅力应该从教师的仪表风范中绽放。

美好的理想、美好的情怀、美好的言行和美好的氛围,是学校作为精神家园的应有之义。

阙校长,正是这样一位传递美好的使者。

作为学校主管教学的副校长,她用知性的力量影响着老师们,用人格魅力引导学生成长。

在接触了朱老师的“新教育”理念后,她架起了师生阅读的桥梁,填补了我们民族地区语文教学的空白。

她告诉我们,书籍是有生命和灵性的,阅读是教师和学生的天职。

她倡导的“晨颂”、“午读”、“暮省”阅读方式,让书香溢满校园,让心灵在书海中自由翱翔。

为了激发师生的阅读热情,阙校长亲自组织了“文运茶香”教师读书沙龙,开展了“我的读书故事演讲”等活动,让老师们在书香中找到心灵的慰藉。

同时,她也组织了“学生读书征文”、“经典诵读”、“美文诵读”等活动,让学生在阅读中发现知识的乐趣,培养对书籍的热爱。

阙校长本人也是一位博览群书的学者。

她阅读了苏霍姆林斯基、陶行知等教育大师的著作,重温教育的精髓;她阅读了李镇西、窦桂梅等当代教育家的作品,聆听时代的声音;她阅读了沈从文、彭学明等乡土文学作家的书籍,品味乡土文化的神韵;她阅读了《论语》、《诗经》等古典文学,感受中华文化的魅力。

在她的博客中,有这样的话语:“真正的美好阅读是来自心灵的洗礼,它使人生丰富多彩、妙趣横生,使人生健康圆满,它使我们心情变得温暖而又柔软,纯净而又明媚”。

她用微笑和自信,带着诗情画意,走近学生,走进课堂。

Java开发中的Memcache原理及实现

Java开发中的Memcache原理及实现

Java开发中的Memcache原理及实现作者:jiaxiaoyuan1204整理:chaijunkun来源:/一、概述1. Memcache是什么Memcache(Memcached)是集群环境下的缓存解决方案。

Memcache是的一个项目,最早是为LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。

它可以应对任意多个连接,使用非阻塞的网络IO。

它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable。

Memcache官方网站:/memcached,更多详细的信息可以来这里了解。

2. 为什么会有Memcache和memcached两种名称其实Memcache是这个项目的名称,而memcached是它服务器端的主程序文件名,知道我的意思了吧。

一个是项目名称,一个是主程序文件名,在网上看到了很多人不明白,于是混用了。

3. 如何在Java开发中使用Memcache在Java开发中使用Memcache,一般要用到以下几个程序:1) Memcached该程序用来在Linux或Windows服务器上建立和管理缓存。

其项目网址为:/memcached/。

2) MagentMagent是一款开源的Memcached代理服务器软件,使用它可以搭建高可用性的集群应用的Memcached服务,其项目网址为:/p/memagent/。

3) Memcached客户端程序至于Memcached的客户端程序,一般推荐用memcached client for java,为什么推荐用这种客户端,后面会讲到具体的原因,其项目的网址为:/gwhalin/Memcached-Java-Client/。

4)其它程序i. Libevent在Linux环境下应用Memcache时,Memcache用到了libevent这个库,用于Socket的处理,所以还需要安装libevent。

Memcached分布式缓存简介

Memcached分布式缓存简介

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

它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。

相信很多人都用过缓存,在.net 中也有内置的缓存机制,还有很多第三方工具如apache,nginx等可以做静态资源的缓存,同时我们也可以制定自己的缓存机制,缓存数据库查询的数据以减少对数据库的频繁操作。

但是很多时候我们总是感觉这些缓存总不尽人意,Memcached可以解决你不少的烦恼问题。

最少在我的学习中解决了我不少问题,所以决定记录下来分享。

Memcached基于一个存储键/值对的hashmap。

其守护进程是用C写的,但是客户端可以用任何语言来编写(本文使用C#作为例子),并通过memcached协议与守护进程通信。

可能这些东西都太高深了,我们暂不做研究。

二.分布式缓存其实 Memcached作为一个分布式缓存数据服务,但是每个服务之间根本没有进行相互通信,这里可能与我理解的分布式有点区别,可能是我才疏学浅,也可能是每个人思考问题的角度不同。

Memcached 客户端就是通过一种分布式算法将数据保存到不同的Memcached服务器上,将数据进行缓存。

分布式缓存,可以而知memcached可以进行大数据量的缓存。

这点可以弥补我们之前很多人都遇到的将数据缓存到应用服务器上,而且只能缓存少量数据,否则对应用服务器的影响非常大。

Memcached应用机制图:这个图是有点简陋了,但是问题还是能够描述的清楚的,缓存机制的基本原理就是先查询数据保存到memcached中,地址在此请求就直接从Memcached缓存中取数据,这样就可以减少对服务器请求压力。

三.Memcached 特征(1)协议简单: 不使用复杂的xml格式,而是使用文本格式(2)基于libevent的事件处理机制 (不懂)(3)内置内存存储方式: 数据存在在内存中,所以重启机器会导致数据丢失(4)Memcached相互不通信的分布式: Memcached 服务器之间不会进行通信,数据都是通过客户端的分布式算法存储到各个服务器中四.Memcached的安装首先这里是在windows系统上做测试,Memcached在linux等非windows平台上性能会更高。

memcached内存管理与删除机制及服务器实现 -回复

memcached内存管理与删除机制及服务器实现 -回复

memcached内存管理与删除机制及服务器实现-回复memcached是一款高性能的分布式内存对象缓存系统,常用于动态网站的加速和负载均衡。

作为一种缓存系统,它的内存管理和删除机制对于系统的性能和稳定性非常重要。

本文将一步一步回答有关memcached的内存管理与删除机制及服务器实现的内容。

一、memcached的内存管理机制1. 内存分配memcached使用一个内存池来管理内存,即在启动时分配一块可用于缓存的大内存块,然后根据需要将其划分为多个固定大小的内存块,这样可以提高内存使用效率。

在内存分配时,memcached使用slab分配器来实现。

slab分配器将内存块按照不同大小的chunk(或者称为slab class)分成多个组,每个组里的chunk大小都会是这个组的最小chunk大小的倍数。

这种分配方式可以降低内存碎片,提高内存利用率。

2. 内存回收memcached使用了简单的LRU算法(最近最少使用算法)来进行内存回收。

当内存达到上限时,会根据数据的使用频率来决定哪些数据应该被淘汰。

LRU算法会在内存不足时,将最近最少被访问的数据从缓存中删除,以腾出内存供新数据使用。

3. LRU算法和内存回收LRU算法是一种常用的缓存淘汰算法,它根据数据的访问时间来判断哪些数据是冷数据(很久没有被访问的数据),从而可以将这些冷数据淘汰出缓存。

在memcached中,LRU算法的具体实现是通过维护一个LRU队列来实现的,最前面的元素代表最近最少访问的数据,最后面的元素代表最近最频繁访问的数据。

当内存不足时,memcached会从LRU队列末尾开始淘汰数据,直到满足内存需求为止。

二、memcached的删除机制1. 手动删除memcached提供了delete命令来手动删除指定的键值对。

使用delete 命令可以通过键来删除对应的缓存数据。

2. 过期删除memcached支持设置键值对的过期时间,当数据的过期时间到达时,memcached会自动删除对应的数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3
Memcached介绍 Memcached介绍
Memcached运行图 Memcached运行图
4
Memcached介绍 Memcached介绍
谁在用Memcached 谁在用Memcached? Memcached?
国外
国内
5
Memcached介绍 Memcached介绍
与Memcached类似的还有什么? Memcached类似的还有什么? 类似的还有什么
//服务器列表 //服务器列表 node[0] => 192.168.0.1:11211 node[1] => 192.168.0.2:11211 node[2] => 192.168.0.3:11211 //获取key是tokyo的节点ID(服务器 //获取key是tokyo的节点ID(服务器ID) 获取key 的节点ID(服务器ID) int id = getServerId("test", 3); //得出的结果是 //得出的结果是1,那么对应的机器就是 得出的结果是1 node[id] == node[1]
6
Memcached介绍 Memcached介绍
Memcached的主要特点 Memcached的主要特点
基于C/S架构,协议简单 基于C/S架构, C/S架构 基于libevent的事件处理 基于libevent libevent的事件处理 自主内存存储处理 基于客户端的Memcached分布式 基于客户端的Memcached Memcached分布式
14
Memcached介绍 Memcached介绍: 介绍:
基于客户端的Memcached 基于客户端的Memcached分布式 Memcached分布式
15
Memcached介绍 Memcached介绍: 介绍:
基于客户端的Memcached 基于客户端的Memcached分布式 Memcached分布式
9
Memcached介绍 Memcached介绍
自主的内存存储处理
数据存储方式:Slab Allocation 数据存储方式: 数据过期方式:Lazy Expiration + LRU 数据过期方式:
10
Memcached介绍 Memcached介绍
数据存储方式:Slab Allocation 数据存储方式:
2
Memcached介绍 Memcached介绍: 介绍:
什么是Memcached 什么是Memcached? Memcached?
Memcached是国外社区网站 Memcached是国外社区网站 LiveJournal 的开发团队开发的高性能的分布式内 存缓存服务器.一般的使用目的是,通过缓存数据库查询结果, 存缓存服务器.一般的使用目的是,通过缓存数据库查询结果,减少数据库访 问次数,以提高动态Web应用的速度,提高可扩展性. Web应用的速度 问次数,以提高动态Web应用的速度,提高可扩展性. LiveJournal 团队开发了包括 Memcached,MogileFS,Perlbal 等不错的开 Memcached,MogileFS, 源项目. 源项目. 官方网站: 官方网站:/memcached/
Slab Alloction 构造图 Slab Allocator的基本原理是按照预先 Allocator的基本原理是按照预先 规定的大小, 规定的大小,将分配的内存分割成特定 长度的块,以完全解决内存碎片问题. 长度的块,以完全解决内存碎片问题. Slab Allocation的原理相当简单. 将 Allocation的原理相当简单 的原理相当简单. 分配的内存分割成各种尺寸的块 chunk), ),并把尺寸相同的块分成组 (chunk),并把尺寸相同的块分成组 chunk的集合 的集合) (chunk的集合)
//按照Key值 获取一个服务器ID //按照Key值,获取一个服务器ID 按照Key int getServerId(char *key, int serverTotal) { int c, hash = 0; while (c = *key++) { hash += c; } return hash % serverTotal; }
国外 Cabinet: (日本 Tokyo Cabinet:/index.html (日本 mixi.jp公司开发 公司开发) mixi.jp公司开发)
国内 MemcacheDB: (新浪开源Team开发 新浪开源Team开发) MemcacheDB: (新浪开源Team开发) (偶开发的 tmcache: (偶开发的 ^_^)
7
Memcached介绍 Memcached介绍
基于C/S架构, 基于C/S架构,协议简单 C/S架构
8
Memcached介绍 Memcached介绍
基于libevent 基于libevent的事件处理 libevent的事件处理
libevent是一套跨平台的事件处理接口的封装,能够兼容包括这些操作系统: libevent是一套跨平台的事件处理接口的封装,能够兼容包括这些操作系统: 是一套跨平台的事件处理接口的封装 等操作系统的的事件处理. Windows/Linux/BSD/Solaris 等操作系统的的事件处理. 包装的接口包括: 包装的接口包括: poll,select(Windows),epoll(Linux),kqueue(BSD), poll,select(Windows),epoll(Linux),kqueue(BSD),/dev/pool(Solaris) Memcached 使用libevent来进行网络并发连接的处理,能够保持在很大并发情 使用libevent来进行网络并发连接的处理, libevent来进行网络并发连接的处理 况下,仍旧能够保持快速的响应能力. 况下,仍旧能够保持快速的响应能力. libevent: /~provos/libevent/
13
Memcached介绍 Memcached介绍: 介绍:
数据过期方式
Lazy Expiration memcached内部不会监视记录是否过期 而是在get时查看记录的时间戳, 内部不会监视记录是否过期, get时查看记录的时间戳 memcached内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过 这种技术被称为lazy 惰性)expiration.因此,memcached不会在过期监视上耗费 lazy( 期.这种技术被称为lazy(惰性)expiration.因此,memcached不会在过期监视上耗费 CPU时间. CPU时间. 时间
16
Memcached介绍 Memcached介绍: 介绍:
基于客户端的Memcached 基于客户端的Memcached分布式 Memcached分布式
写入操作 读取操作
17
Memcached安装和使用 Memcached安装和使用: 安装和使用:
ached 安装 Memcached 与 PHP 结合使用 Memcached 与 C/C++ 结合使用
18
Memcached安装和使用 Memcached安装和使用: 安装和使用:
Memcached 安装
安装步骤: 安装步骤: 先安装 libevent 再安装 Memcached 主程序
源码下载:(最新版) 源码下载: 最新版)
libevent官网: libevent官网:/~provos/libevent/ 官网 libevent下载 /~provos/libevent-1.4.9libevent下载:/~provos/libevent-1.4.9-stable.tar.gz 下载: Memcached官网: Memcached官网:/memcached 官网 Memcached下载 /memcached/dist/memcachedMemcached下载:/memcached/dist/memcached-1.2.6.tar.gz 下载:
12
Memcached介绍 Memcached介绍: 介绍:
数据存储方式:Slab Allocation 数据存储方式:
Slab Alloction 缺点
这个问题就是,由于分配的是特定长度的内存, 这个问题就是,由于分配的是特定长度的内存,因此无法有效利用 分配的内存.例如, 100字节的数据缓存到128字节的chunk中 字节的数据缓存到128字节的chunk 分配的内存.例如,将100字节的数据缓存到128字节的chunk中,剩 余的28字节就浪费了. 28字节就浪费了 余的28字节就浪费了.
memcached根据收到的数据的大小, memcached根据收到的数据的大小,选 根据收到的数据的大小 择最适合数据大小的slab slab. 择最适合数据大小的slab. memcached中保存着slab内空闲chunk的 中保存着slab内空闲chunk memcached中保存着slab内空闲chunk的 列表,根据该列表选择chunk chunk, 列表,根据该列表选择chunk,然后将 数据缓存于其中. 数据缓存于其中.
19
Memcached安装和使用 Memcached安装和使用: 安装和使用:
Memcached 安装
安装 libevent
# tar zxvf libevent-1.4.9-stable.tar.gz libevent-1.4.9# cd libevent-1.4.9-stable libevent-1.4.9# ./configure --prefix=/usr --prefix=/usr # make # make install
11
Memcached介绍 Memcached介绍
数据存储方式:Slab Allocation 数据存储方式:
Slab Classes 分配图 Page:分配给Slab的内存空间, Page:分配给Slab的内存空间,默认是 Slab的内存空间 1MB.分配给Slab之后根据slab Slab之后根据slab的大小 1MB.分配给Slab之后根据slab的大小 切分成chunk chunk. 切分成chunk. Chunk:用于缓存记录的内存空间. Chunk:用于缓存记录的内存空间. Slab Class:特定大小的chunk的组. Class:特定大小的chunk的组. chunk的组
相关文档
最新文档