Memcached介绍

1、介绍

Memcached是一个开源的、支持高性能,高并发的分布式内存缓存系统。

Memcached的做用
传统场景中,多数Web应用都将数据保存到关系型数据库中(例如: MySQL),Web服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,关系型数据库的负担就会出现加剧、响应缓慢、致使网站打开延迟等问题,影响用户体验。
这时就须要 Memcached软件出马了。使用 Memcached的主要目的是,经过在自身内存中缓存关系型数据库的査询结果,减小数据库被访问的次数,以提升动态Web应用的速度、提升网站架构的并发能力和可扩展性。
Memcached服务的运行原理是经过在事先规划好的系统内存空间中临时缓存数据库中的各种数据,以达到减小前端业务服务对数据库的直接高并发访问,从而提高大规模网站集群中动态服务的并发访问能力。
生产场景的 Memcached服务通常被用来保存网站中常常被读取的对象或数据,就像咱们的客户端浏览器也会把常常访问的网页缓存起来同样,经过内存缓存来存取对象或数据要比磁盘存取快不少,由于磁盘是机械的,所以,在当今的IT企业中,Memcached的应用范围很普遍。

常见的内存缓存服务软件以下:前端

2、Memcached在企业中的应用场景

一、做为数据库的查询数据缓存web

(1)完整数据缓存算法

 (2)热点数据缓存数据库

二、做为集群节点的session会话共享缓存浏览器

即把客户端用户请求多个前端应用服务集群产生的session会话信息。同一存储到一个Memcached缓存中。因为session会话数据是存储在内存中的,因此速度很快。缓存

3、Memcached的特色与工做机制

一、Memcached的特色
Memcached做为高并发、高性能的缓存服务,具备以下特色:
(1)协议简单。 Memcached的协议实现很简单,采用的是基于文本行的协议,能经过telnet/nc等命令直接操做 Memcached服务存取数据。

(2)支持epol/ kqueue异步IO模型,使用 libevent做为事件处理通知机制。简单的说, libevent是一套利用C开发的程序库,它将BSD系统的 kqueue、 Linux系统的epoll等事件处理功能封装成一个接口,确保即便服务器端的链接数增长也能发挥很好的性能。 Memcached就是利用这个 libevent库进行异步事件处理的。

(3)采用key/value键值数据类型。被缓存的数据以 key/value键值形式存在

(4)全内存缓存,效率高。 Memcached管理内存的方式很是高效,即所有的数据都存放于 Memcached服务事先分配好的内存中,无持久化存储的设计,和系统的物理内存同样,当重启系统或 Memcached服务时,Memcached内存中的数据就会丢失。
         若是但愿重启后,数据依然能保留,那么就能够采用 Redis这样的持久性内存缓存系统,更多的开源软件见http://blog.51cto.com/oldboy/775056
         当内存中缓存的数据容量达到服务启动时设定的内存值时,就会自动使用LRU算法删除过时的缓存数据。也能够在存放数据时对存储的数据设置过时时间,这样过时后数据就自动被清除, Memcached服务自己不会监控数据过时,而是在访问的时候查看key的时间戳判断是否过时。

(5)可支持分布式集群。
         Memcahced没有像 MySQL那样的主从复制方式,分布式 Memcahced集群的不一样服务器之间是互不通讯的,每个节点都独立存取数据,而且数据内容也不同。经过对web应用端的程序设计或者经过支持hash算法的负载均衡软件,可让 Memcached支持大规模海量分布式缓存集群应用。

二、Mecached工做原理与机制服务器

(1)Mecached工做原理网络

    Memcached是一套相似C/S模式架构的软件,在服务器端启动Memcached服务守护进程,能够指定监听本地的P地址、端口号、并发访问链接数,以及分配了多少内存来处理客户端请求。
(2)Socket事件处理机制
    Memcached软件是由C语言来实现的,所有代码仅有2000多行,采用的是异步epoll/kqueue非阻塞I/o网络模型,其实现方式是基于异步的 libevent事件单进程、单线程模式。使用libevent做为事件通知机制,应用程序端经过指定服务器的IP地址及端口,就能够链接 Memcached服务进行通讯
(3)数据存储机制
    须要被缓存的数据以 key/value键值对的形式保存在服务器端预分配的内存区中每一个被缓存的数据都有惟一的标识key,操做 Memcached中的数据就是经过这个惟一标识的key进行的。缓存到 Memcached中的数据仅放置在 Memcached服务预分配的内存中,而非存储在 Memcached服务器所在的磁盘上,所以存取速度很是快。
    因为 Memcached服务自身没有对缓存的数据进行持久化存储的设计,所以,在服务器端的Memcached服务进程重启以后,存储在内存中的这些数据就会丢失。且当内存中缓存的数据容量达到启动时设定的内存值时,也会自动使用LRU算法删除过时的数据。
    开发 Memcached的初衷仅是经过内存缓存提高访问效率,并无过多考虑数据的永久存储问题。所以,若是使用 Memcached做为缓存数据服务,要考虑数据丢失后带来的问题,例如:是否能够从新生成数据,还有,在高并发场合下缓存宕机或重启会不会致使大量请求直接到数据库,致使数据库没法承受,最终致使网站架构雪崩等.
(4)内存管理机制
    Memcached采用了以下机制
    采用sab内存分配机制
    采用LRU对象清除机制
    采用hash机制快速检索item。
(5)多线程处理机制
    多线程处理时采用的是 pthread(POSIX)线程模式。
    若要激活多线程,可在编译时指定:./configure--enable-threads
    锁机制不够完善。
    负载太重时,能够开启多线程(-t线程数为CPU核数)。session

相关文章
相关标签/搜索