Memcached

Memcached是一套分布式的内存对象缓存系统,使用C语言编写,作为数据库的前端cache,缓存数据库查询结果能够减轻数据库负载。

类似一张巨大的hash表,缓存的对象以key-value对的形式存在。

工作流程

  1. 检查client请求的数据是否在Memcached中存在,若存在直接返回结果
  2. 若不存在,查询数据库,返回结果并把结果缓存
  3. 每次改动数据库时要同一时候更新Memcached数据
  4. 内存空间用完之后使用LRU算法替换缓存

特点

  1. 基于文本行的协议,能够直接通过telnet管理
  2. 基于libevent,异步io,高性能。libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能 封装成统一的接口。
  3. 对被缓存的数据没有备份,重新启动后对数据库产生较大的压力
  4. memcached不互相通信的分布式,分布式由client完毕

工作原理

服务守护进程执行后,client连接到服务进程进行操作。眼下支持python,c,php等多种client。服务进程基于事件的单进程单线程实现。

  • 内存管理

    内存使用slab分配器分配,这样的方案能够降低内存碎片和内存分配释放次数,加快处理速度。服务进程把分配的内存切割成各种固定尺寸的块,依据待缓存数据的大小选择一个最合适大小的块存入。分配的内存不会释放,而是反复利用。

    数据大小和块的大小不匹配时会造成内存利用率低下。默认情况下不同大小的块的尺寸以2的增长因子扩大,能够使用'-f'选项调整增长因子。
  • 分布式

    分布式由client实现,client依据key来选择不同的memcachedserver。

    一般使用hash值modserver台数来选择。这样当server台数发生变化时会造成大量key相应的server改变,短时间内数据库server负载很大。一致性hash能够解决问题。

    • 一致性hash使用普通的hash将每一个key映射到圆环上的一个点,而每一个server节点也映射到圆环上的一个点。依据key相应的圆环上的点顺时针行进找到的第一个节点即为应保存的位置。
    • 对server节点hash时非常难做到server节点在圆环上的均匀分布,能够採用虚拟节点的思想,为每一个server在圆环上分配100~200个点,做到更均匀的hash。
    • 当移除或添加�一个server节点时,仅仅有此节点相应的key的缓存受到影响。

       

       
      转载请注明作者:Focustc,博客地址为http://blog.csdn.net/caozhk,原文链接为点我

Memcached概述的更多相关文章

  1. memcached概述与基本操作

    memcached 什么是memcached memcached之前是danga的一个项目,最早是为LiveJournal服务的,当初设计师为了加速LiveJournal访问速度而开发的,后来被很多大 ...

  2. memcached 的简介、安装、命令

    一.memcached 概述 Memcache(内存,缓存) : 是一个高性能的分布式的内存对象缓存系统.通过在内存里维护一个巨大的hash表.(key=value) Hash表 key(键) val ...

  3. Memcached(1)-----基本介绍

    memcached memcached概述 memcached是LiveJournal旗下Danga Interactive公司开发的一款软件.memcached是一个高性能,分布式内存对象缓存系统, ...

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

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

  5. Memcached缓存系统介绍及安装

    1.什么是Memcached 1.1.Memcached概述 Memcached是一个免费的开源的.高性能的.具有又分布式内存对象的缓存系统,它通过减轻数据库负载加速动态WEB应用, 1.2.Memc ...

  6. MemCached配置与缓存知识概述

    先看看百度百科里面对缓存的介绍: 缓存(Cache memory)是硬盘控制器上的一块内存芯片,具有极快的存取速度,它是硬盘内部存储和外界接口之间的缓冲器.由于硬盘的内部数据传输速度和外界介面传输速度 ...

  7. Redis,MemCached,MongoDB 概述

    调研项目主要有Redis. MemCached. MongoDB,以及Amazon的DynamoDB Redis 是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key- ...

  8. [Redis]Redis 概述及基本使用规范.

    1 nosql的简介 1.1 nosql简介 随着互联网Web2.0网站的兴起,传统的关系数据库在应付Web2.0网站,特别是超大规模和高并发的SNS类型的Web2.0纯动态网站已经显得力不从心,暴露 ...

  9. Mysql和Memcached的连动

    Memcached 和 mysqld 的联通 一 概述: what's UDFs ? UDFs是User Defined Functions的缩写,表示Mysql用户自定义的函数,应用程序可以利用这些 ...

随机推荐

  1. XAML概览 1(译自JeremyBytes.com)

    (文章译自JeremyBytes.com,由于原文太长,故分成几篇,能力所限,如有疏漏,希望海涵.另外若有侵权,务必尽快告知) Overview 了解XAML (可扩展应用程序标记语言)是使用WPF和 ...

  2. Hamming Weight的算法分析(转载)

    看代码时遇到一个求32bit二进制数中1的个数的问题,感觉算法很奇妙,特记录学习心得于此,备忘. 计算一个64bit二进制数中1的个数. 解决这个问题的算法不难,很自然就可以想到,但是要给出问题的最优 ...

  3. 用pdo实现的织梦后台留言板

    <?php //ini_set("display_errors", "On"); include("data/common.inc.php&qu ...

  4. Delphi Refactor 重构

    delphi refactor procedure TCameraComponentForm.btnRefreshConfigClick(Sender: TObject); var a:string; ...

  5. cocos2d-x3.2 使用开关控制按钮 ControlSwitch

    ContolSwitch 控件起到了一个开关的作用类似于现实生活中的开关,直接上代码: .h文件 // // SwitchBtnScene.h // LSWGameIOS // // Created ...

  6. LightOJ 13361336 - Sigma Function (找规律 + 唯一分解定理)

    http://lightoj.com/volume_showproblem.php?problem=1336 Sigma Function Time Limit:2000MS     Memory L ...

  7. Python基础 初识Python

    机器码 机器码(machine code),学名机器语言指令,有时也被称为原生码(Native Code),是电脑的CPU可直接解读的数据. 通常意义上来理解的话,机器码就是计算机可以直接执行,并且执 ...

  8. oracle学习 十二 使用.net程序调用带返回值的存储过程(持续更新)

    数据库返回的是结果集,存储过程返回的是一个或者多个值,所以不要使用while循环去读取,也不要使用datareader函数去调用.v_class_name是返回函数 使用.net调用oracle数据库 ...

  9. CodeForces 710A King Moves (水题)

    题意:给定一个坐标,问你皇后有几个方向可以走. 析:直接格举那八个方向即可. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000 ...

  10. M站 滚动日历弹框

    先放张效果图: 完整Demo: <!DOCTYPE html> <html lang="en"> <head> <meta http-eq ...