memcached总结

来源:互联网 发布:两个移动硬盘对拷数据 编辑:程序博客网 时间:2024/05/31 11:03

memcached 是为了解决web应用服务器频繁、集中的读取数据库,造成数据库压力加大,网站反馈延迟的问题。

使用了memcached技术的情况下,请求到达应用服务器后,首次访问数据库,将取得的数据保存至memcached,第二次访问,则从memcached中取得数据显示页面。通过这种 缓存技术,减少数据库访问次数,提高了web响应的速度。

memcached的特点:

  • 分布式缓存服务器 客户端程序实现分布式,与服务器端无关。各个客户端实现基本相同。假设memcached服务器有三台node1,node2,node3,见下图。


向memcached中添加键时,客户端程序库算法会根据键决定保存到哪个memcached服务器。当获取键时,也要将键名传到客户端程序库,通过与保存数据相同的算法,根据键值找到服务器,取出保存的值。其客户端函数库Cache::Memcached实现分布式的方式。
  • 协议简单 memcached服务器端与客户端的通信使用简单的基于文本行的协议。可通过telnet保存、获取数据。
  • 基于libevent的事件处理 libevent是一个程序库。它将linux的epoll、BSD类操作系统的kqueue等事件处理功能封装成统一的接口。故memcached使用这个库,也能在linux、BSD、Solaris等操作系统上发挥高性能。
  • 内置内存存储方式 当重启memcached、重启操作系统会导致数据消失。另外,容量达到指定值,也将基于LRU算法自动删除不使用的缓存。
  • memcached不互相通信的分布式 服务器端并没有分布式的能力,因此各个memcached不会互相共享信息。这样保存一台服务器出现问题时,其它仍能使用。其分布式的方式取决于应用程序客户端的分布式算法。
memcached的内存分配机制
默认情况下采用slab Allocation机制管理内存。解决内存碎片的问题。其原理是将分配的内存(默认1M),分割成各种尺寸的块(chunk),并把尺寸相同的块分成组(slab class)。memcached根据收到的数据大小,选择适合的slab,将数据放到合适的chunk中。问题是由于分配的特定长度的内存,因此无法有效利用分配的内存,可能出现浪费。目前不能完全解决访问题。但在memcached启动时指定Growth Factor因子(-f ),可以在某种程度上控制slab之间的差异。