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上。
三Memcache和Memcached到底有什么区别?
Memcache 是 danga.com 的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。
Memcached 是一个开源、高性能、分布式内存对象缓存系统
Memcache 是这个项目的名称,而 memcached 是它服务器端的主程序文件名
四Memcached 作用Memcached 是以守护程序方式运行于一个或多个服务器中,随时接受客户端的连接操作。客户端首先与 Memcached 服务建立连接,然后存取对象。保存在 Memcached 中的对象是放置在内存中的,而不是在硬盘上。
Memcached 进程运行之后,会预申请一块较大的内存空间,自己进行管理,用完之后再申请,不是每次需要的时候去向操作系统申请。Memcached将对象保存在一个巨大的Hash表中,它还使用NewHash算法来管理Hash表,从而获得进一步的性能提升。所以当分配给Memcached的内存足够大的时候,Memcached的时间消耗基本上只是网络Socket连接了。
总之,Memcached用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。
四 Memcached的不足:1、数据是保存在内存当中的,一旦服务进程重启,数据会全部丢失
对策:可以采取更改Memcached的源代码,增加定期写入硬盘的功能
2、Memcached以root权限运行,而且Memcached本身没有任何权限管理和认证功能,安 全性不足
对策:可以将Memcached服务绑定在内网IP上,通过防火墙进行防护