天翼云分布式缓存服务Memcache介绍

合集下载

Memcache分布式内存缓存系统

Memcache分布式内存缓存系统

Memcache是什么?memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库教程负载,提升访问速度。

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

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

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

Memcache官方网站:/memcached,更多详细的信息可以来这里了解关于Memcache和memcached其实应该说这不是个问题,但网上有很多地方用着这两个不同的单词。

Memcache是这个项目的名称,Memcached是这个项目的主程序的文件名,就这么简单。

工作原理:首先 memcached 是以守护程序方式运行于一个或多个服务器中,随时接受客户端的连接操作,客户端可以由各种语言编写,目前已知的客户端 API 包括 Perl/PHP/Python/Ruby/Java/C#/C 等等。

客户端在与 memcached 服务建立连接之后,接下来的事情就是存取对象了,每个被存取的对象都有一个唯一的标识符 key,存取操作均通过这个 key 进行,保存到 memcached 中的对象实际上是放置内存中的,并不是保存在 cache 文件中的,这也是为什么 memcached 能够如此高效快速的原因。

注意,这些对象并不是持久的,服务停止之后,里边的数据就会丢失。

与许多 cache 工具类似,Memcached 的原理并不复杂。

它采用了C/S的模式,在 server 端启动服务进程,在启动时可以指定监听的 ip,自己的端口号,所使用的内存大小等几个关键参数。

一旦启动,服务就一直处于可用状态。

Memcached 的目前版本是通过C实现,采用了单进程,单线程,异步I/O,基于事件 (event_based) 的服务方式.使用 libevent 作为事件通知实现。

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参数

memcached参数Memcached是一种高性能的分布式内存对象缓存系统,常用于提高Web应用程序的性能和扩展性。

Memcached的设计目标是提供一个简单、快速、可扩展的缓存解决方案,而其参数配置则对其性能和稳定性至关重要。

以下是一些常见的Memcached参数及其作用:2. -U,--udp:启用UDP监听功能。

默认情况下,Memcached使用TCP进行通信,但也可以选择启用UDP。

使用UDP可以提高性能,但同时也可能会导致数据丢失。

3. -l,--listen:指定绑定的IP地址。

默认情况下,Memcached会绑定到所有可用的IP地址上,但可以通过此参数来指定要绑定的特定IP地址。

4. -u,--user:指定运行Memcached进程的用户。

可以使用此参数来提高服务器的安全性,限制只有指定用户才能运行Memcached。

5. -m,--memory:指定Memcached使用的内存大小(以MB为单位)。

这个参数非常重要,它决定了可以缓存的对象数量和大小。

应根据预期的负载和可用内存来调整此参数。

6. -c,--connections:指定Memcached服务器能够处理的最大并发连接数。

默认情况下,这个值是1024,但在高并发情况下,可能需要增加这个值来处理更多的连接。

7. -t,--threads:指定Memcached使用的线程数量。

默认情况下,Memcached会根据可用的处理器核心数量来自动配置线程数,但也可以通过此参数来手动设置线程数量。

9. -R,--max-reqs-per-event:指定每个事件处理器循环中处理的最大请求数。

默认情况下,Memcached每次处理一个请求,但这个参数可以用来限制每个事件处理器循环中处理的请求数,以提高其他连接的响应速度。

以上是一些常用的Memcached参数,通过对这些参数的配置,可以根据实际需求来优化Memcached的性能和稳定性。

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平台上性能会更高。

天翼云分布式缓存服务Memcache介绍

天翼云分布式缓存服务Memcache介绍

天翼云分布式缓存服务Memcache介绍MemCache是一套高性能分布式的高速缓存系统,用于动态Web应用以减轻数据库负载,由LiveJournal的Brad Fitzpatrick开发。

目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著。

这是一套开放源代码软件,以BSD license授权发布。

MemCache通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度。

MemCache是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串、对象等)所使用的key-value存储,数据可以来自数据库调用、API调用,或者页面渲染的结果。

MemCache设计理念就是小而强大,它简单的设计促进了快速部署、易于开发并解决面对大规模的数据缓存的许多难题,而所开放的API使得MemCache能用于Java、C/C++/C#、Perl、Python、PHP、Ruby等大部分流行的程序语言。

MemCache工作原理MemCache采用C/S架构,在服务器端启动后,以守护程序的方式,监听客户端的请求。

启动时可以指定监听的IP(服务器的内网ip/外网ip)、端口号(所以做分布式测试时,一台服务器上可以启动多个不同端口号的MemCached进程)、使用的内存大小等关键参数。

一旦启动,服务就会一直处于可用状态。

为了提高性能,MemCache缓存的数据全部存储在MemCache 管理的内存中,所以重启服务器之后缓存数据会清空,不支持持久化。

MemCache内存管理内存结构每个slab_class里面包含若干个slab。

每个slab里面包含若干个page,page的默认大小是1M。

每个page里面包含若干个chunk,chunk是数据的实际存放单位,每个slab 里面的chunk大小相同内存分配方式Memcached使用slab allocation机制来分配和管理内存。

memcached工作原理

memcached工作原理

memcached工作原理
memcached是一款高性能的分布式内存缓存系统,主要用于减轻数据库负载,提高应用程序的性能。

其工作原理如下:
1. 客户端向memcached服务器发送请求,请求可以是获取或设置缓存数据。

2. 如果请求是获取缓存数据,memcached服务器首先检查是否有该数据的缓存副本,如果有,则返回该数据给客户端。

3. 如果请求是设置缓存数据,memcached服务器将数据存储到其内存中,并设置相应的索引。

4. 当memcached服务器的内存空间不足时,会采用LRU(最近最少使用)算法将一些旧的缓存数据删除,以腾出更多的内存空间。

5. 当多个memcached服务器组成一个分布式缓存集群时,客户端需要通过一致性哈希算法来选择具体的服务器,以保证缓存数据的一致性。

6. 当客户端对缓存数据进行修改时,需要同时更新所有memcached服务器上的缓存数据,以保证数据一致性。

总之,memcached工作原理简单、高效,可以提高应用程序的响应速度和吞吐
量,同时减少数据库的负载。

详解MemCached原理

详解MemCached原理

详解MemCached原理memcached是⼀个⾼性能的分布式内存缓存服务器,memcached在Linux上可以通过yum命令安装,这样⽅便很多,在⽣产环境下建议⽤Linux系统,memcached使⽤libevent这个库在Linux系统上才能发挥它的⾼性能。

它的分布式其实在服务端是不具有分布式的特征的,是依靠客户端的分布式算法进⾏了分布式,memcached是⼀个纯内存型的数据库,这样在读写速度上相对来说⽐较快。

memcached的内存分配是预先分配内存,常规的程序使⽤内存⽆⾮是两种,⼀种是预先分配,⼀种是动态分配。

动态分配从效率的⾓度来讲相对来说要慢点,因为它需要实时的去分配内存使⽤,但是这种⽅式的好处就是可以节约内存使⽤空间;memcached采⽤的是预先分配的原则,这种⽅式是拿空间换时间的⽅式来提⾼它的速度,这种⽅式会造成不能很⾼效的利⽤内存空间,但是memcached采⽤了Slab Allocation机制来解决内存碎⽚的问题,Slab Allocation的基本原理就是按照预先规定的⼤⼩,将分配的内存分割成特定长度的块,并把尺⼨相同的块分成组(chunk的集合),借⽤⼀下⽹上的图:memcached会针对客户端发送的数据选择slab并缓存到chunk中,这样就有⼀个弊端那就是⽐如要缓存的数据⼤⼩是50个字节,如果被分配到如上图88字节的chunk中的时候就造成了33个字节的浪费,虽然在内存中不会存在碎⽚,但是也造成了内存的浪费,这也是我上⾯说的拿空间换时间的原因,不过memcached对于分配到的内存不会释放,⽽是重复利⽤。

默认情况下如下图chunk是1.25倍的增加的,当然也可以⾃⼰通过-f设置,这种内部的分割算法可以参看源码下的slabs.c⽂件。

memcached本⾝内部不会监视记录是否过期,⽽是当get时依靠记录的过期时间检查是否过期,这也是memcached的⼀种惰性过期机制。

memcache 用法

memcache 用法

memcache 用法
Memcache 是分布式缓存系统,主要服务于动态Web 应用,以减轻数据库负载。

其运作机理是基于存储键值对的数据结构(在内存中建立一个巨大的hash表,可以存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等)。

以下是Memcache的使用方法:1.添加一个键值对:使用 add 方法,例如:$mem->add('test','123',0,60);。

其中,'test' 是键,'123' 是值,0 是过期时间(单位:秒),60 是缓存时间(单位:秒)。

2.获取一个键的值:使用 get 方法,例如:$mem->get('test');。

这将返回键'test' 的值。

3.覆写已存在的键值对:使用 replace 方法,例如:$mem->replace('test','456',0,60);。

这将会替换键'test' 的值,新的值为'456'。

4.删除一个键值对:使用 delete 方法,例如:$mem->delete('test',60);。

这将删除键'test' 及其对应的值。

请注意,以上只是Memcache 的基础使用方式,实际应用中可能涉及更多复杂的操作和设置。

如果您需要更深入的了解或使用,建议查阅Memcache 的官方文档或相关教
程。

memcache 用法

memcache 用法

memcache 用法摘要:1.简介2.Memcache的安装与配置3.Memcache的使用方法4.Memcache的数据类型5.Memcache的应用场景6.Memcache的优缺点7.总结正文:Memcache是一款高性能的分布式内存对象缓存系统,主要用于提高网站访问速度和减轻服务器负载。

它通过将热点数据存储在内存中,以减少对数据库的访问次数,从而提高网站性能。

1.简介Memcache是一个高性能的分布式内存对象缓存系统,主要用于提高网站访问速度和减轻服务器负载。

它通过将热点数据存储在内存中,以减少对数据库的访问次数,从而提高网站性能。

Memcache支持多种数据类型,包括字符串、整数、浮点数等。

2.Memcache的安装与配置要使用Memcache,首先需要在服务器上安装Memcache服务端。

安装完成后,需要对Memcache进行配置,包括设置内存大小、连接数等参数。

配置完成后,启动Memcache服务。

3.Memcache的使用方法Memcache的使用方法主要包括以下几个步骤:(1)连接Memcache服务器:使用PHP的Memcache扩展库,通过`memcache_connect()`函数连接到Memcache服务器。

(2)设置缓存数据:使用`memcache_set()`函数将数据存储到Memcache中。

(3)获取缓存数据:使用`memcache_get()`函数从Memcache中获取数据。

(4)删除缓存数据:使用`memcache_delete()`函数从Memcache中删除数据。

(5)清空缓存:使用`memcache_clear_cache()`函数清空Memcache 中的所有数据。

4.Memcache的数据类型Memcache支持多种数据类型,包括字符串、整数、浮点数等。

此外,Memcache还支持数据结构,如数组、链表等。

5.Memcache的应用场景Memcache主要应用于以下场景:(1)缓存数据库查询结果:将经常访问的数据从数据库中取出,存储到Memcache中,以减少对数据库的访问次数。

分布式缓存解决方案

分布式缓存解决方案

分布式缓存解决方案随着互联网应用的发展和用户量的激增,对系统性能和响应速度的要求也越来越高。

而分布式缓存作为一种常见的解决方案,在提升系统性能方面发挥着重要的作用。

本文将介绍什么是分布式缓存以及常见的分布式缓存解决方案。

一、什么是分布式缓存分布式缓存是指将缓存数据存储和处理分布在多台计算机节点上,通过统一的接口对外提供缓存服务。

相比于单机缓存,分布式缓存具有多台节点可扩展性好、容错性强的优点,能够有效提高系统的性能和可用性。

二、常见的分布式缓存解决方案1. MemcachedMemcached是一种广泛应用、轻量级的开源分布式缓存解决方案。

它采用内存存储数据,通过哈希分区将数据分布在多台服务器上,实现数据的快速读写。

Memcached具有高性能、简单易用的特点,适用于缓存热点数据、加速数据库访问等场景。

2. RedisRedis是一种高性能、高可用的开源分布式缓存和存储系统。

它支持丰富的数据结构和功能,如字符串、哈希表、列表、集合、有序集合等,并提供了多种持久化方式。

Redis通过主从复制和分片等机制实现数据的高可用和水平扩展。

它适用于缓存、消息队列、分布式锁等场景。

3. HazelcastHazelcast是一种基于Java的开源分布式数据存储和计算平台,其中包含了分布式缓存功能。

它提供了分布式数据结构和分布式计算接口,支持多种数据模型,如Map、List、Set、Queue等。

Hazelcast具有良好的可扩展性和可靠性,适用于分布式计算、缓存共享等场景。

4. CouchbaseCouchbase是一种面向文档的分布式数据库,但也提供了内置的缓存功能。

它采用Memcached协议和Redis协议实现缓存功能,并支持多数据中心复制、跨数据中心同步等高级特性。

Couchbase具有高可用、高性能、水平扩展的优点,适用于大规模数据存储和缓存的场景。

三、如何选择分布式缓存解决方案在选择分布式缓存解决方案时,需要考虑以下几个方面的因素:1. 需求场景:根据具体的业务需求,选择适合的分布式缓存解决方案。

memcache原理

memcache原理

memcache原理Memcache是一种用于提升网站性能的缓存系统,它的设计原理和工作机制对于了解和理解它的使用和优化至关重要。

Memcache的原理基于内存缓存,通过将数据存储在内存中,提高了数据的读取和写入速度。

与传统的数据库存储方式相比,Memcache将数据存储在RAM中,因此可以极大地加快数据的访问速度。

Memcache的工作机制是通过将数据分布在多个服务器上,构成一个缓存集群。

每个服务器都有自己的内存空间,用于存储数据。

当需要读取数据时,应用程序首先会向Memcache发送一个请求,如果数据存在于缓存中,Memcache会立即返回数据给应用程序,从而避免了对数据库的访问。

如果数据不存在于缓存中,应用程序会从数据库中读取数据,并将数据保存到缓存中,以便后续的读取请求可以直接从缓存中获取。

Memcache的分布式存储方式使得它具有高可用性和可扩展性。

当一个节点发生故障时,其他节点仍然可以继续工作,保证了系统的稳定性。

而且,当系统的负载增加时,可以通过添加更多的服务器来扩展缓存集群的容量,从而满足更高的并发访问需求。

为了提高缓存的命中率,Memcache还使用了一种称为哈希算法的技术。

在存储数据时,Memcache会根据键的哈希值将数据分配到不同的服务器上。

当需要读取数据时,应用程序会使用相同的哈希算法计算键的哈希值,并将请求发送到相应的服务器上。

这样可以保证同一键的数据总是存储在同一个服务器上,提高了缓存的命中率。

为了避免缓存数据过期问题,Memcache引入了一个过期时间的概念。

当存储数据时,可以为每个键值对设置一个过期时间,超过该时间后,数据将自动从缓存中删除。

这样可以确保缓存中的数据始终保持最新。

尽管Memcache可以提高系统的性能,但也存在一些限制。

首先,由于数据存储在内存中,因此缓存的容量受限于可用的内存大小。

其次,由于数据存储在多个服务器上,因此在进行写操作时需要考虑数据的一致性和同步性。

memcached 参数

memcached 参数

memcached参数
Memcached是一种高性能的分布式内存缓存系统,它常用于提升Web应用程序的性能和可扩展性。

以下是一些常见的Memcached参数和其作用的简要说明:
1.`-p`或`--port`:指定Memcached服务器监听的端口号,默认为11211。

2.`-l`或`--listen`:指定Memcached服务器监听的IP地址,默认为所有可用地址。

3.`-m`或`--memory`:指定分配给Memcached的内存容量,以MB为单位。

4.`-c`或`--connections`:指定Memcached服务器可以同时处理的最大连接数。

5.`-t`或`--threads`:指定Memcached服务器使用的线程数。

6.`-k`或`--lock-memory`:锁定分配给Memcached的内存,防止其他进程使用。

7.`-M`或`--disable-eviction`:禁用缓存淘汰机制,即不会自动删除过期或较少使用的数据。

8.`-I`或`--max-item-size`:设置Memcached中每个存储项的最大大小,默认为1MB。

9.`-f`或`--factor`:设置缓存大小增长的因子,用于动态扩展内存。

10.`-n`或`--min-threads`:指定空闲线程的最小数量,用于处理请求。

11.`-R`或`--max-requests`:限制每个连接的最大请求数。

12.`-B`或`--binary-protocol`:启用Memcached的二进制协议。

memc 原理

memc 原理

memc 原理Memcached是一种常用的内存缓存系统,其原理主要包括数据存储、缓存失效和并发控制三个方面。

一、数据存储Memcached将数据存储在内存中,以提高数据访问速度。

具体而言,它通过将数据分散存储在多个服务器节点上,实现了数据的分布式存储。

每个节点都有唯一的标识符,称为key,用于标识存储的数据。

当客户端需要获取数据时,它会向Memcached发送一个请求,包含所需数据的key。

Memcached根据这个key计算出数据所在的节点,并将数据从该节点返回给客户端。

这种分布式存储方式使得数据可以被高效地存储和访问。

二、缓存失效为了保证缓存数据的有效性,Memcached引入了缓存失效机制。

当数据发生变化时,应用程序负责通知Memcached进行缓存失效操作。

具体而言,应用程序在数据发生变化时,将相应的key发送给Memcached,告知其相应的缓存数据已过时。

Memcached接收到该信息后,会将相应的数据从缓存中删除,以保证下一次访问时能够获取到最新的数据。

这种缓存失效机制能够确保缓存数据与后端数据的一致性。

三、并发控制由于多个客户端可能同时对同一个数据进行读写操作,为了保证数据的一致性和并发性,Memcached引入了并发控制机制。

具体而言,当多个客户端同时请求同一份数据时,Memcached会使用一种称为CAS(Compare and Swap)的机制来实现并发控制。

CAS机制通过比较数据的版本号来判断数据是否被修改过,在修改数据时,如果版本号与当前版本号一致,则可以进行修改操作,否则需要重新获取最新的数据。

这样可以避免多个客户端同时修改同一份数据造成的冲突问题。

Memcached通过数据存储、缓存失效和并发控制三个方面的原理,实现了高效的内存缓存系统。

它将数据存储在内存中,以提高数据访问速度,并通过分布式存储的方式实现数据的高效存储和访问;通过缓存失效机制保证缓存数据的有效性,与后端数据的一致性;通过并发控制机制保证多个客户端对同一份数据的一致性和并发性。

分布式缓存系统Memcached入门指导

分布式缓存系统Memcached入门指导

分布式缓存系统Memcached入门指导摘要:这篇Memcached入门介绍涵盖的主题包括安装、配置、memcached 客户机命令和评估缓存效率,主要讨论与 memcached 服务器的直接交互,其目的是为您提供监控memcahed 实例所需的工具。

首先介绍一下,memcached 是由 Danga Interactive 开发并使用 BSD 许可的一种通用的分布式内存缓存系统Memcached示意图(来自)Danga Interactive 开发 memcached 的目的是创建一个内存缓存系统来处理其网站 的巨大流量。

每天超过 2000 万的页面访问量给 LiveJournal 的数据库施加了巨大的压力,因此 Danga 的 Brad Fitzpatrick 便着手设计了 memcached。

memcached 不仅减少了网站数据库的负载,还成为如今世界上大多数高流量网站所使用的缓存解决方案。

本文首先全面概述memcached,然后指导您安装memcached 以及在开发环境中构建它。

我还将介绍 memcached 客户机命令(总共有 9 个)并展示如何在标准和高级 memcached 操作中使用它们。

最后,我将提供一些使用 memcached 命令测量缓存的性能和效率的技巧。

如何将 memcached 融入到您的环境中?在开始安装和使用 using memcached 之前,我们需要了解如何将 memcached 融入到您的环境中。

虽然在任何地方都可以使用 memcached,但我发现需要在数据库层中执行几个经常性查询时,memcached 往往能发挥最大的效用。

我经常会在数据库和应用服务器之间设置一系列 memcached 实例,并采用一种简单的模式来读取和写入这些服务器。

图 1 可以帮助您了解如何设置应用程序体系结构:图 1. 使用 memcached 的示例应用程序体系结构体系结构相当容易理解。

memcache

memcache

memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。

Memcache是的一个项目,最早是为LiveJourna l 服务的,最初为了加速LiveJournal 访问速度而开发的,后来被很多大型的网站采用。

目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。

起初作者编写它可能是为了提高动态网页应用,为了减轻数据库检索的压力,来做的这个缓存系统。

它的缓存是一种分布式的,也就是可以允许不同主机上的多个用户同时访问这个缓存系统,这种方法不仅解决了共享内存只能是单机的弊端,同时也解决了数据库检索的压力,最大的优点是提高了访问获取数据的速度!基于me mcache作者对分布式cache的理解和解决方案。

memcache完全可以用到其他地方比如分布式数据库,分布式计算等领域。

[编辑本段]接口介绍Memcache客户端包含两组接口,一组是面向过程的接口,一组是面向对象的接口,具体可以参考PHP手册“LXXV. Memcache Functions” 这章。

Memcache面向对象的常用接口包括:Memcache::connect -- 打开一个到Memcache的连接Memcache::pconnect -- 打开一个到Memcache的长连接Memcache::close -- 关闭一个Memcache的连接Memcache::set -- 保存数据到Memcache服务器上Memcache::get -- 提取一个保存在Memcache服务器上的数据Memcache::replace -- 替换一个已经存在Memcache服务器上的项目(功能类似Memcache::set)Memcache::delete -- 从Memcache服务器上删除一个保存的项目Memcache::flush -- 刷新所有Memcache服务器上保存的项目(类似于删除所有的保存的项目)Memcache::getStats -- 获取当前Memcache服务器运行的状态Memcache::addServer -- 分布式服务器添加一个服务器[编辑本段]Memcache协议分析如果你不喜欢php_memcache.dll 扩展或者服务器器目前不支持这个扩展,那么就可以考虑自己构建,需要构建Memcahe的客户端,要先了解Memcache协议的交互,这样才能开发自己的客户端,这里简单的分析以下Memcache的协议。

memcache分布式原理

memcache分布式原理

Memcache是一种分布式内存缓存系统,它的分布式原理主要包括以下几个方面:1. 数据分片:Memcache将数据分成多个片段,每个片段存储在不同的服务器上。

这样可以将数据均匀地分布在不同的节点上,提高系统的并发处理能力和数据存储容量。

2. 一致性哈希算法:为了确定数据应该存储在哪个节点上,Memcache使用一致性哈希算法。

该算法将数据的键值通过哈希函数映射到一个固定的哈希环上,然后根据节点的位置在环上进行分配。

这样可以保证当节点增加或减少时,只有少量的数据需要重新分配。

3. 节点间通信:在Memcache中,各个节点之间通过网络进行通信。

当一个节点接收到一个请求时,它会首先检查本地是否有所需的数据,如果没有则会向其他节点发送请求。

节点之间的通信可以通过TCP/IP协议进行,也可以使用UDP 协议进行更快的数据传输。

4. 数据一致性:在分布式系统中,数据一致性是一个重要的问题。

Memcache通过使用复制和失效机制来保证数据的一致性。

当一个节点接收到一个写请求时,它会将数据写入本地缓存,并将数据复制到其他节点上。

当一个节点接收到一个读请求时,它会首先检查本地缓存是否有所需的数据,如果没有则会向其他节点请求数据。

5. 负载均衡:为了提高系统的性能和可扩展性,Memcache 使用负载均衡算法将请求均匀地分配到不同的节点上。

常用的负载均衡算法包括轮询、随机和最少连接等。

总的来说,Memcache通过数据分片、一致性哈希算法、节点间通信、数据一致性和负载均衡等机制实现了分布式的存储和访问。

这些机制使得Memcache能够处理大量的并发请求,并提供高性能的缓存服务。

memcache 查询数据原理

memcache 查询数据原理

memcache 查询数据原理Memcache 是一个分布式内存对象缓存系统,它通常用于减轻数据库的负载,提高系统的性能。

以下是 Memcache 查询数据的原理:1. 键值对存储:Memcache 使用键值对的方式来存储数据。

每个数据项都有一个唯一的键,通过这个键可以快速检索对应的值。

2. 内存存储:Memcache 将数据存储在内存中,这意味着读取速度非常快。

这是 Memcache 相比于传统的硬盘数据库的一大优势。

3. 分布式:Memcache 可以部署在多个服务器上,形成一个分布式系统。

客户端根据一定的算法(如一致性哈希)将键分散到不同的服务器上,从而实现负载均衡和数据冗余。

4. 缓存策略:Memcache 使用 LRU(Least Recently Used)策略来管理缓存。

当缓存满了,最久未使用的数据将被淘汰。

5. 通信协议:Memcache 使用基于文本的协议与客户端进行通信,这使得它很容易通过各种编程语言进行访问。

6. 查询过程:当客户端需要查询某个键的值时,它首先会向 Memcache 服务器发送一个请求。

Memcache 服务器会检查该键是否存在于其内存中。

如果存在,服务器会立即返回相应的值。

如果键不存在,服务器不会返回任何数据,而是告诉客户端该键未找到。

此时,客户端可以选择继续查询数据库或其他数据源,或者简单地重试查询 Memcache(可能数据刚刚被其他客户端写入)。

7. 持久化:虽然 Memcache 的主要目的是作为内存缓存,但也可以配置它定期将数据写入磁盘或数据库,以防止数据在服务器重启后丢失。

总的来说,Memcache 通过快速的内存存储、分布式架构和缓存策略来提高数据的查询速度,从而减轻数据库的负载。

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

MemCache是一套高性能分布式的高速缓存系统,用于动态Web应用以减轻数据库负载,由LiveJournal的Brad Fitzpatrick开发。

目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著。

这是一套开放源代码软件,以BSD license授权发布。

MemCache通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度。

MemCache是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串、对象等)所使用的key-value存储,数据可以来自数据库调用、API调用,或者页面渲染的结果。

MemCache设计理念就是小而强大,它简单的设计促进了快速部署、易于开发并解决面对大规模的数据缓存的许多难题,而所开放的API使得MemCache能用于Java、C/C++/C#、Perl、Python、PHP、Ruby等大部分流行的程序语言。

MemCache工作原理MemCache采用C/S架构,在服务器端启动后,以守护程序的方式,监听客户端的请求。

启动时可以指定监听的IP(服务器的内网ip/外网ip)、端口号(所以做分布式测试时,一台服务器上可以启动多个不同端口号的MemCached进程)、使用的内存大小等关键参数。

一旦启动,服务就会一直处于可用状态。

为了提高性能,MemCache缓存的数据全部存储在MemCache管理的内存中,所以重启服务器之后缓存数据会清空,不支持持久化。

MemCache内存管理内存结构每个slab_class里面包含若干个slab。

每个slab里面包含若干个page,page的默认大小是1M。

每个page里面包含若干个chunk,chunk是数据的实际存放单位,每个slab 里面的chunk大小相同内存分配方式Memcached使用slab allocation机制来分配和管理内存。

先将分配的内存按照预设好的大小分割成特定长度的内存块,再把尺寸相同的内存块分成组。

数据在存放时,根据键值大小去匹配slab大小,找就近的slab存放。

而传统的内存管理方式是,使用完通过malloc分配的内存后通过free来回收内存,这种方式容易产生内存碎片并降低操作系统对内存的管理效率。

存放数据时,首先slab要申请内存,申请内存以page为单位。

在放入第一个数据的时候,无论大小为多少,都会有1M大小的page被分配给该slab。

申请到page后,slab会将这个page的内存按chunk的大小进行切分,这样就变成了一个chunk数组,最后从这个chunk数组中选择一个用于存储数据。

示例:本例中,slab[1]的chunk大小为88字节、slab[2]的chunk大小为112字节、slab[3]的chunk大小为144字节...(默认相邻slab内的chunk基本以1.25为比例进行增长,MemCache启动时可以用-f指定这个比例),那么一个100字节大小的value,将被放到slab[2]中。

这是由于在MemCache中,value的存放位置由其大小决定,value会被存放到与chunk大小最接近的一个slab中,即slab allocation机制。

内存回收方式由于slab allocator机制中,分配的chunk大小是固定的,因此可能会造成内存的浪费。

对于chunk空间的浪费问题,无法彻底解决,只能缓解该问题。

不同于FIFO(First In,First Out)删除机制,当数据容量用完MemCached分配的内存后,就会基于LRU(Least Recently Used)算法清理失效的缓存数据(放入数据时可设置失效时间),或者清理最近最少使用的缓存数据,然后放入新的数据。

在LRU中,MemCached使用的是一种Lazy Expiration策略,不会监控存入的key/value对是否过期,而是在获取key值时查看记录的时间戳,检查key/value对空间是否过期,这样可减轻服务器的负载,即过期数据惰性删除,节省了cpu时间和检测成本。

如果MemCache启动没有追加-M,则表示禁止LRU,这种情况下内存不够时会报Out Of Memory错误。

MemCache分布式存储为了提升MemCache的存储容量和性能,可能会有多个MemCache服务器来对客户端提供服务,这就是MemCache的分布式。

分布式实现原理MemCache采用了单进程、单线程、异步I/O,基于事件(event_based)的服务方式,使用libevent作为事件通知实现分布式存储。

MemCache当中的Server可以协同工作,但他们之间保存的数据各不相同,而且并不通信,每个Server只管理自己的数据。

服务端并没有“分布式”功能。

Client端通过IP地址和端口号指定Server端,将需要缓存的数据以key-value的对应形式保存在Server端。

key值通过hash进行转换,根据hash值把value传递到对应的具体的某个Server上。

当需要获取对象数据时,也根据key进行获取。

首先对key进行hash转换,通过获得的值可以确定它被保存在了哪台Server上,然后再向该Server发出请求。

Client端只需要知道保存hash(key)的值在哪台服务器上即可。

向MemCache集群存入/取出key/value时,MemCache客户端程序根据一定的算法计算存入哪台服务器,然后再把key/value值存到此服务器中。

亦即是说,存取数据分为二步:1.选择服务器;2.存/取数据。

分布式算法解析余数算法:根据键的整数散列值(键string的HashCODE值),除以服务器台数,根据余数确定存取服务器,这种方法计算简单,高效,但在MemCache服务器数量变化时,几乎所有的缓存都会失效。

散列算法:先算出MemCache服务器的散列值,并将其分布到0到2^32的圆上,然后用同样的方法算出存储数据的键的散列值并映射至圆上,最后从数据映射到的位置开始顺时针查找,将数据保存到查找到的第一个服务器上,如果超过2^32,依然找不到服务器,就将数据保存到第一台MemCache服务器上。

如果添加了一台MemCache服务器,只在圆上增加服务器的逆时针方向的第一台服务器上的键会受到影响。

MemCache线程管理MemCache网络模型是典型的单进程多线程模型。

采用libevent处理网络请求,主进程负责将新来的连接分配给work线程,work线程负责处理连接,有点类似于负载均衡,通过主进程分发到对应的工作线程。

MemCache默认有7个线程,4个主要的工作线程,3个辅助线程,线程可划分为以下4种:主线程:负责MemCache服务器初始化,监听TCP、Unix Domain连接请求;工作线程池:MemCache默认4个工作线程,可通过启动参数修改,负责处理TCP、UDP,Unix域套接口链路上的请求;assoc维护线程:MemCache内存中维护一张巨大的hash表,该线程负责hash 表动态增长;slab维护线程:即内存管理模块维护线程,负责class中slab的平衡,MemCache启动选项中可关闭该线程。

MemCache特性与限制MemCache中可以保存的item数据量是没有限制的,只要内存足够。

MemCache单进程在32位机中最大使用内存为2G,在64位机中则没有限制。

Key的最大长度为250个字节,超过该长度将无法存储,由常量KEY_MAX_LENGTH250控制。

单个item最大数据是1MB,超过1MB的数据不予存储,由常量POWER_BLOCK 1048576进行控制。

MemCache服务端是不安全的。

比如已知某个MemCache节点,可以直接telnet 过去,并通过flush_all让已经存在的键值对立即失效,所以MemCache服务器最好配置到内网环境,通过防火墙制定可访问客户端。

不能够遍历MemCache中所有的item。

因为这个操作的速度相对缓慢且会阻塞其他的操作。

MemCache的高性能源自于两阶段哈希结构:第一阶段在客户端,通过Hash算法根据Key值算出一个节点;第二阶段在服务端,通过一个内部的Hash算法,查找真正的item并返回给客户端。

从实现的角度看,MemCache是一个非阻塞的、基于事件的服务器程序。

MemCache设置添加某一个Key值的时候,虽然传入expiry为0表示这个Key值永久有效,但是这个Key值也会在30天之后失效。

由常量REALTIME_MAXDELTA60*60*24*30控制。

最大同时连接数是200,通过conn_init()中的freetotal进行控制,最大软连接数是1024,通过settings.maxconns=1024进行控制。

跟空间占用相关的参数:settings.factor=1.25,settings.chunk_size=48,影响slab的数据占用和步进方式。

MemCache是键值一一对应,key默认最大不能超过128个字节,value默认大小是1M,也就是一个slabs,如果要存2M的值(连续的),不能用两个slabs,因为两个slabs不是连续的,无法在内存中存储,故需要修改slabs的大小,多个key和value进行存储时,即使这个slabs没有利用完,那么也不会存放别的数据。

MemCache已经可以支持C/C++、Perl、PHP、Python、Ruby、Java、C#、Postgres、Chicken Scheme、Lua、MySQL和Protocol等语言客户端。

相关文档
最新文档