浅谈--Memcached

memcached是什么?

memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 为首开发的一款软件。现在已成为 mixi、 hatena、 Facebook、 Vox、LiveJournal等众多服务中 提高Web应用扩展性的重要因素。
许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。 但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、 网站显示延迟等重大影响。
这时就该memcached大显身手了。memcached是高性能的分布式内存缓存服务器。 一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、 提高可扩展性。
这里写图片描述

memcached的特征

memcached作为高速运行的分布式缓存服务器,具有以下的特点。

  • 协议简单
  • 基于libevent的事件处理
  • 内置内存存储方式
  • memcached不互相通信的分布式
协议简单

memcached的服务器客户端通信并不使用复杂的XML等格式, 而使用简单的基于文本行的协议。因此,通过telnet 也能在memcached上保存数据(set)、取得数据(get)。

基于libevent的事件处理

libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能 封装成统一的接口。即使对服务器的连接数增加,也能发挥O(1)的性能。 memcached使用这个libevent库,因此能在Linux、BSD、Solaris等操作系统上发挥其高性能。

内置内存存储方式

为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。 由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。 另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。 memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。

内存管理采用采用Slab Allocator机制分配内存、管理内存。
基本原理:按照预先规定的大小,将分配的内存分割成特定长度的块
(类似于空间配置器),默认内存大小为64MB,将内存切分成chunk
memcache根据收到的数据的大小,选择最适合数据大小的块(memcached保存着空闲块的列表)
缺点:分配的是特定长度的内存,无法有效利用分配的内存。
解决:预先知道客户端发送数据的大小,动态调整内存分割块的大小。
可以使用growth factor选项。
memcached在启动时指定Growth Factor因子(-f选项),可以控制slab分割块之间的差异,可以调整分割块之间的间距。
可以使用stats查看memcached内部状态。
memcached在数据删除方面有效利用资源,不会释放已经分配的内存,记录超时后,客户端就无法看见该记录,其存储空间可重复使用。当内存空间不足时,从“最近最少使用”LRU搜索,并将其空间分配给新的记录。内部不会监视记录是否过期,而是在get时查看记录的时间戳。不会在过期监视上耗费CPU时间。

memcached不互相通信的分布式

memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。 各个memcached不会互相通信以共享信息。那么,怎样进行分布式呢? 这完全取决于客户端的实现。
这里写图片描述
添加数据:根据客户端实现的算法,根据数据的“键”来选择保存数据的memcached服务器,选定好服务器,再将数据写入memcached中。
eg:set(gyz”,data);
获取数据:获取时,将获取数据的键‘gyz’传递给函数库。函数库通过与数据保存时相同的算法,根据键来选择服务器。使用的算法相同就能保证与保存时相同的服务器,然后发送get命令。

这样,不同的键保存到了不同的服务器,就实现了memcached的分布式。
服务器和具体的请求均可以使用一致性哈希来进行实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值