文档章节

Memcached-分布式内存缓存服务器

ymzyf2007
 ymzyf2007
发布于 2014/11/14 17:38
字数 1178
阅读 27
收藏 0
点赞 0
评论 0

      许多Web 应用程序都将数据保存到关系型数据库中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大,访问的集中,就会出现数据库的负担加重,数据库响应恶化,网站延迟等重大影响。Memcached是高性能的分布式内存缓存服务器。一般的使用目的是通过缓存数据库查询结果,减少对数据库的访问次数,以提高动态Web应用的响应速度、提高扩展性。如图:
分布式缓存-Memcached

Memcached作为高速运行的分布式内存缓存服务器具有以下特点:

       协议简单:memcached的服务器客户端通信并不使用复杂的MXL等格式,而是使用简单的基于文本的协议。

       基于libevent的事件处理:libevent是个程序库,他将Linux 的epoll、BSD类操作系统的kqueue等时间处理功能封装成统一的接口。memcached使用这个libevent库,因此能在Linux、BSD、Solaris等操作系统上发挥其高性能。

       内置内存存储方式:为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached,重启操作系统会导致全部数据消失。另外,内容容量达到指定的值之后memcached回自动删除不适用的缓存。

       Memcached不互通信的分布式:memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。各个memcached不会互相通信以共享信息。他的分布式主要是通过客户端实现的。


Memcached的内存管理

        Memcached默认情况下采用了名为Slab Allocatoion的机制分配,管理内存。

        Slab Allocator的基本原理是按照预定规定的大小,将分配的内存分割成特定长度的块,已完全解决内存碎片问题。Slab Allocator的原理相当简单:将分配的内存分割成各种尺寸的块,并把尺寸相同的块分成组

如图:

分布式缓存-Memcached

Memcached在数据删除方面有效利用资源
       Memcached删除数据时数据不会真正从Memcached中消失。Memcached不会释放已分配的内存。记录超时后,客户端就无法再看见该记录,其存储空间即可重复使用。

       Lazy Expriationmemcached内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。这种技术称为lazy expiration.因此memcached不会再过期监视上耗费CPU资源。


对于缓存存储容量满的情况下的删除需要考虑多种机制,一方面是按队列机制,一方面应该对应缓存对象本身的优先级,根据缓存对象的优先级进行对象的删除。

LRU:从缓存中有效删除数据的原理
       Memcached会优先使用已超时的记录空间,但即使如此,也会发生追加新纪录时空间不足的情况。此时就要使用名为Last Recently Used(LRU)机制来分配空间。这就是删除最少使用的记录的机制。因此当memcached的内存空间不足时,就从最近未使用的记录中搜索,并将空间分配给新的记录。

Memcached分布式
       Memcached虽然称为分布式缓存服务器,但服务器端并没有“分布式”的功能。Memcached的分布式完全是由客户端实现的。现在我们就看一下memcached是怎么实现分布式缓存的。

        假如下面有memcached服务器node1~node3三台,应用程序要保存键名为“bizDataKey”“pageDataKey”的数据。

        首先向memcached中添加“bizDataKey”。将“bizDataKey”传给客户端程序库后,客户端实现的算法就会根据“键”来决定保存数据的memcached服务器。服务器选定后,即命令它保存“bizDataKey”及其值。
        同样“pageDataKey”都是先选择memcached服务器再保存。

        接下来获取保存的数据。获取时也要将获取的键“pageDataKey”传递给客户端程序库。程序库通过与数据保存时相同的算法,根据”键“选择服务器。
分布式缓存-Memcached

        这样,将不同的键保存到不同的memcached服务器上,就实现了memcached的分布式。memcached服务器增多后,键就会分散,即使一台memcached服务器发生故障无法连接,也不会影响其他的缓存,系统依然能继续运行。


© 著作权归作者所有

共有 人打赏支持
ymzyf2007
粉丝 0
博文 1
码字总数 1178
作品 0
广州
分布式缓存-Memcached

什么是Memcached 许多Web 应用程序都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大,访问的集中,就会出现REBMS的负担加重,数据库响应恶化,网站显示延...

风子 ⋅ 2013/03/20 ⋅ 0

memcached总结

分布式缓存出于如下考虑,首先是缓存本身的水平线性扩展问题,其次是缓存大并发下的本身的性能问题,再次避免缓存的单点故障问题(多副本和副本一致性)。分布式缓存的核心技术包括首先是内存本...

天下杰论 ⋅ 2014/08/07 ⋅ 0

memcached分布式内存缓存服务器

memcached是什么? memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 为首开发的一款软件。现在已成为 mixi、 hatena、 Facebook、 Vox、LiveJournal等众多服务中 提...

凡尘里的一根葱 ⋅ 2015/10/23 ⋅ 0

Memcached全面剖析

整个网站应用中,缓存几乎无处不在,既存在于浏览器、也存在于应用服务器和数据库服务器;既可以对数据缓存(分布式缓存),也可以对文件缓存(分布式存储系统),还可以对页面片段缓存(ESI...

亚特兰缇斯 ⋅ 2016/04/03 ⋅ 0

memcached简介与安装【网络摘抄】

memcached是什么? memcached是以LiveJournal 旗下Danga Interactive公司的Brad Fitzpatric 为首开发的一款软件。现在已成为mixi 、 hatena、 Facebook 、 Vox 、LiveJournal等众多服务中提高...

yuanzhitang ⋅ 2016/09/06 ⋅ 0

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

一、问题: 数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求。 二、解决方案: 1.通过高速服务器Cache缓存数据库数据 2.内存数据库 (这里仅从数据缓存方面考虑,当然,...

商者 ⋅ 2016/03/17 ⋅ 0

Memcache 分布式高可用集群介绍

分布式缓存需考虑如下三点: 1、缓存本身的水平线性扩展的问题。 2、缓存大病罚下的本身性能问题。 3、避免缓存的单点鼓掌问题。 分布式缓存存在的问题: 1、内存本身的管理问题。内存的分配...

科技小毛 ⋅ 2017/10/13 ⋅ 0

Memcache知识点梳理

Memcache知识点梳理 Memcached概念: Memcached是一个免费开源的,高性能的,具有分布式对象的缓存系统,它可以用来保存一些application和DB之间经常存取的对象或数据,保存的数据像一张巨大...

亚特兰缇斯 ⋅ 2015/03/05 ⋅ 0

“阿里人”分享大型网站架构系列:缓存在分布式系统中的应用

分布式缓存 CDN,反向代理缓存,主要解决静态文件,或用户请求资源的缓存,数据源一般为静态文件或动态生成的文件(有缓存头标识)。 分布式缓存,主要指缓存用户经常访问数据的缓存,数据源为...

java高级分享 ⋅ 01/14 ⋅ 0

memcached分布式实现原理

摘要 在高并发环境下,大量的读、写请求涌向数据库,此时磁盘IO将成为瓶颈,从而导致过高的响应延迟,因此缓存应运而生。无论是单机缓存还是分布式缓存都有其适应场景和优缺点,当今存在的缓...

Float_Luuu ⋅ 2016/05/08 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

服务网关过滤器

过滤器作用 我们的微服务应用提供的接口就可以通过统一的API网关入口被客户端访问到了。但是,每个客户端用户请求微服务应用提供的接口时,它们的访问权限往往都需要有一定的限制,系统并不会...

明理萝 ⋅ 14分钟前 ⋅ 1

【2018.06.21学习笔记】【linux高级知识 14.1-14.3】

14.1 NFS介绍 NFS服务全称是NetWork File System:网络文件系统,最早有sun公司开发的,4.0版本由Netapp公司开发,是基于RPC远程过程调用(Remote Procedure Call)协议的服务。 14.2 NFS服务...

lgsxp ⋅ 23分钟前 ⋅ 0

Day18 vim编辑模式、命令模式与练习

编辑模式 命令模式 :nohl 不高亮显示 :x与:wq类似,如果在更改文件之后操作,两者效果一样;如果打开文件,没有任何操作; :wq会更改mtime,但是:x不会。 练习题 扩展 vim的特殊用法 ht...

杉下 ⋅ 27分钟前 ⋅ 0

Enum、EnumMap、EnumSet

1、Enum 不带参数 public enum Car { AUDI { @Override public int getPrice() { return 25000; } }, MERCEDES { ......

职业搬砖20年 ⋅ 27分钟前 ⋅ 0

Java中的锁使用与实现

1.Lock接口 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源。 在Lock出现之前,java程序是靠synchronized关键字实现锁功能的,而Java SE5之后,...

ZH-JSON ⋅ 29分钟前 ⋅ 0

线程组和 ThreadLocal

前言 在上面文章中,我们从源码的角度上解析了一下线程池,并且从其 execute 方法开始把线程池中的相关执行流程过了一遍。那么接下来,我们来看一个新的关于线程的知识点:线程组。 线程组 ...

猴亮屏 ⋅ 30分钟前 ⋅ 0

相对路径和绝对路径

基本概念   文件路径就是文件在电脑中的位置,表示文件路径的方式有两种,相对路径和绝对路径。在网页设计中通过路径可以表示链接,插入图像、Flash、CSS文件的位置。   物理路径:物理路...

临江仙卜算子 ⋅ 34分钟前 ⋅ 0

消息队列属性及常见消息队列介绍

什么是消息队列? 消息队列是在消息的传输过程中保存消息的容器,用于接收消息并以文件的方式存储,一个队列的消息可以同时被多个消息消费者消费。分布式消息服务DMS则是分布式的队列系统,消...

中间件小哥 ⋅ 36分钟前 ⋅ 0

java程序员使用web3j进行以太坊开发详解

如何使用web3j为Java应用或Android App增加以太坊区块链支持,教程内容即涉及以太坊中的核心概念,例如账户管理包括账户的创建、钱包创建、交易转账,交易与状态、智能合约开发与交互、过滤器...

笔阁 ⋅ 36分钟前 ⋅ 0

vim编辑模式、vim命令模式

vim编辑模式 使用vim filename 进入的界面是一般模式,在这个模式下虽然我们能够查看,复制,剪切,粘贴,但是不能编辑新的内容,如何能直接写入东西呢?这就需要进入编辑模式了,从一般模式...

李超小牛子 ⋅ 39分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部