Memcached概述
Memcached
Memcached是一套分布式的内存对象缓存系统,使用C语言编写,作为数据库的前端cache,缓存数据库查询结果能够减轻数据库负载。
类似一张巨大的hash表,缓存的对象以key-value对的形式存在。
工作流程
- 检查client请求的数据是否在Memcached中存在,若存在直接返回结果
- 若不存在,查询数据库,返回结果并把结果缓存
- 每次改动数据库时要同一时候更新Memcached数据
- 内存空间用完之后使用LRU算法替换缓存
特点
- 基于文本行的协议,能够直接通过telnet管理
- 基于libevent,异步io,高性能。libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能 封装成统一的接口。
- 对被缓存的数据没有备份,重新启动后对数据库产生较大的压力
- 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概述的更多相关文章
- memcached概述与基本操作
memcached 什么是memcached memcached之前是danga的一个项目,最早是为LiveJournal服务的,当初设计师为了加速LiveJournal访问速度而开发的,后来被很多大 ...
- memcached 的简介、安装、命令
一.memcached 概述 Memcache(内存,缓存) : 是一个高性能的分布式的内存对象缓存系统.通过在内存里维护一个巨大的hash表.(key=value) Hash表 key(键) val ...
- Memcached(1)-----基本介绍
memcached memcached概述 memcached是LiveJournal旗下Danga Interactive公司开发的一款软件.memcached是一个高性能,分布式内存对象缓存系统, ...
- 高性能的分布式内存对象缓存系统Memcached
Memcached概述 什么是Memcached? 先看看下面几个概念: Memory:内存存储,不言而喻,速度快,对于内存的要求高,不指出的话所缓存的内容非持久化.对于CPU要求很低,所以常常采 ...
- Memcached缓存系统介绍及安装
1.什么是Memcached 1.1.Memcached概述 Memcached是一个免费的开源的.高性能的.具有又分布式内存对象的缓存系统,它通过减轻数据库负载加速动态WEB应用, 1.2.Memc ...
- MemCached配置与缓存知识概述
先看看百度百科里面对缓存的介绍: 缓存(Cache memory)是硬盘控制器上的一块内存芯片,具有极快的存取速度,它是硬盘内部存储和外界接口之间的缓冲器.由于硬盘的内部数据传输速度和外界介面传输速度 ...
- Redis,MemCached,MongoDB 概述
调研项目主要有Redis. MemCached. MongoDB,以及Amazon的DynamoDB Redis 是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key- ...
- [Redis]Redis 概述及基本使用规范.
1 nosql的简介 1.1 nosql简介 随着互联网Web2.0网站的兴起,传统的关系数据库在应付Web2.0网站,特别是超大规模和高并发的SNS类型的Web2.0纯动态网站已经显得力不从心,暴露 ...
- Mysql和Memcached的连动
Memcached 和 mysqld 的联通 一 概述: what's UDFs ? UDFs是User Defined Functions的缩写,表示Mysql用户自定义的函数,应用程序可以利用这些 ...
随机推荐
- java中子类与基类变量间的赋值
Java中子类与基类变量间的赋值 子类对象可以直接赋给基类变量. 基类对象要赋给子类对象变量,必须执行类型转换, 其语法是: 子类对象变量=(子类名)基类对象名; 也不能乱转换.如果类型转换失败Jav ...
- 初识-----基于Socket的UDP和TCP编程及测试代码
一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流 ...
- 在Mac OS X 10.9上安装 Thrift 0.9.1
Thrift 0.9.1 官方文档中对于Mac OS X上的安装描述适合 10.8,但不适用于10.9. Homebrew macport 默认都不能在 10.9上安装Thrift 0.9.1成功 ...
- 上传控件swfupload的使用笔记
1.下载下来的官方domo里不同的例子里会引入各自的JS,注意区分.可以直接拿官方例子来改成自己想要的例子. 2.注意PHP配置文件里也有最大上传文件限制,如果文件太大会上传不成功. 3.如果有问题可 ...
- 【转】Linux下的多线程编程
1 引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者.传统的 Unix也支持线程的概念,但是在一个进程(proces ...
- erlang 基础知识
一 数据类型 1. 整数 Integer Erlang可表示任意大的整数,大整数自动转换成bignums类型,比固定大小的整数类型相对效率较低. Base#Value 表示基数不是10的整数.如:2# ...
- RxCache 的代码分析,含缓存时间duration的在代码中改变的自己实现的机制
当应用进程创建 RxCache 的实例后,会给应用进程返回一个 rxcache实例及一个 ProxyProvider,代码如下: CacheProviders providers = new RxCa ...
- C++11类型推导
[C++11类型推导] auto 关键字.这会依据该初始化子(initializer)的具体类型产生参数: 除此之外,decltype 能够被用来在编译期决定一个表示式的类型. 参考:http://z ...
- hdoj 5326 Work
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5326 #include<stdio.h> #include<cstring> ...
- POJ2503——Babelfish
Description You have just moved from Waterloo to a big city. The people here speak an incomprehensib ...