大家可能对memcached这种产品早有了解,或者已经应用在自己的网站中了,但是也有一些朋友从来都没有听说过或者使用过。这都没什么关系,本文旨在从各个角度综合的介绍这种产品,尽量深入浅出,如果能对您现在或以后的工作有所帮助,笔者将感到无比荣幸。
一、Memcached 概念
Memcached 是一个开源、高性能、分布式内存对象缓存系统。
官网地址:http://memcached.org/
下载地址:http://www.memcached.org/files/memcached-1.4.25.tar.gz
Memcache和Memcached到底有什么区别?
Memcache 是 danga.com 的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来
构建自己大负载的网站,来分担数据库的压力。
Memcached 是一个开源、高性能、分布式内存对象缓存系统 。
Memcache 是这个项目的名称,而 memcached 是它服务器端的主程序文件名 。
二、Memcached 作用
Memcached 是以守护程序方式运行于一个或多个服务器中,随时接受客户端的连接操作。客户端首先与 Memcached
服务建立连接,然后存取对象。保存在 Memcached 中的对象是放置在内存中的,而不是在硬盘上。
Memcached 进程运行之后,会预申请一块较大的内存空间,自己进行管理,用完之后再申请,不是每次需要的
时候去向操作系统申请。Memcached将对象保存在一个巨 大的Hash表中,它还使用NewHash算法来管理Hash表,
从而获得进一步的性能提升。所以当分配给Memcached的内存足够大的时 候,Memcached的时间消耗基本上只是
网络Socket连接了。
总之,Memcached用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次
数,从而提高动态、数据库驱动网站的速度。
三、Memcached 运行原理
Memcached处理的原子是每一个(key,value)对(以下简称kv对),key会通过一个hash算法转化成hash-key,
便于查找、对比以及做到尽可能的散列。同时,memcached用的是一个二级散列,通过一张大hash表来维护。
Memcached有两个核心组件组成:服务端(Server)和客户端(Client),在一个memcached的查询中,Client
先通 过计算key的hash值来确定kv对所处在的Server位置。当Server确定后,客户端就会发送一个查询请求给
对应的Server,让它来查找确 切的数据。因为这之间没有交互以及多播协议,所以 memcached交互带给网络的
影响是最小化的。
四、Memcached 特性
1、开源
开源地址:https://github.com/memcached/memcached/wiki
2、高性能
无论哪一种数据库(oracle,mssql,mysql,db2……),再怎么优化,最终也避不开与慢速的硬盘进行数据交换,
但往往一旦涉及到 了硬盘的io操作,存取性能就会急剧下降。而Memcached的全部操作自始至终都是在内存中
进行的,所以存取数据的效率非常高。
当然,大型网站对于数据库的操作都会做优化(读写分离,按照业务分库分表)。
3、分布式
分布式系统网上比较专业的解释是:一种计算机硬件的配置方式和相应的功能配置方式。它是一种多处理器的
计算机系统,各处理器通过互连网络构成统一 的系统。系统采用分布式计算结构,即把原来系统内中央处理器
处理的任务分散给相应的处理器,实现不同功能的各个处理器相互协调,共享系统的外设与软件。这 样就加快
了系统的处理速度,简化了主机的逻辑结构。
Memcache的分布式特性主要表现是:Memcached服务器端可以安装在任意数量的server上,提供并行存储和计算
的能力;Memcached客户端和服务器端可以单独安装在任何独立server上。
五、Memcached 不足
1、数据是保存在内存当中的,一旦服务进程重启,数据会全部丢失
对策:可以采取更改Memcached的源代码,增加定期写入硬盘的功能
2、Memcached以root权限运行,而且Memcached本身没有任何权限管理和认证功能,安全性不足
对策:可以将Memcached服务绑定在内网IP上,通过防火墙进行防护