Memcached 是一个分布式的缓存系统, 可是 Memcachd 究竟是什么意思,有什么做用呢?缓存通常用来保存一些常常被存取的数据和资源(例如:浏览器会将访问过的网页会话缓存起来),由于经过缓存来存取数据要比从磁盘存取一样的数据要快得多。因此 Memcached 顾名思义,意味着 “内存缓存”,全部缓存的内容都在服务器的内存中。内存中的这些缓存数据能够经过 API 的方式被存取。数据是以 key/value 的配对方式存在的,就像一像大的 Hash 表。php
分布式是 Memcached 的主要特性,因此你能够在多台服务器上来安装 Memcached 来组建一个更大的缓存服务器。这样一来,Memcached 能够帮助咱们使数据库的压力降到最低, 从而咱们能够构建出更快的、更具扩展性的 WEB 应用。图一展现了 Memcache 如何与数据库端协同工做的状况。mysql
图一展现的流程,相信有开发过数据库应用的同窗都不会陌生。咱们来一步步的说明图中发生了什么事情:sql
显而易见,Memcached 在高并发的数据查询和海量数据输出的状况下,能够起到很大的做用。由于访问 Memcached 中的内存数据,要比数据库的磁盘数据快的多。数据库
若是你想在本身的服务器上尝试使用 Memcached,第一步就是要在你的服务器上安装 Memcached 的相关组件。好在Memcached 在不少服务器的发行版软件上都已经被预安装了。你能够经过在 Shell 下执行下面的命令,来检查你的服务器上有没有被预安装了 Memcached:数组
memcached -h浏览器
若是 Memcached 有被安装过,上面的命令会输出已经安装的版本号信息及一些帮助信息,不然则会返回一个错误。缓存
下面以 CentOs 发行版为例,简单介绍一下如何安装 Memcached。安全
yum install memcached 上面的命令会在线搜索并安装最新的 Memcached 包。服务器
你在什么时候应该使用 Memcache,又要在什么时候避免使用它?如今你已经知道了,Memcahced 是被设计为减轻数据库端压力的。可是你最好能制定一个良好的策略,来想办法让 Memcached 来尽量的缓存那些最影响性能的查询。你能够试着为应用中的全部查询作一些执行时间日志,能够帮助你来分析哪些内容是要重点被缓存的。并发
如今假设你正在运营一个电子商务网站。 你能够在 Memcached 中缓存产品的简介、运送信息,或者其它一些须要复杂查询的数据,等等。当一个产品页被加载的时候,上面提到的数据将会跳过数据库查询,直接从缓存中取得。 缓存能够大大的改变你的网站总体性能表现,你只须要记得在后台更新产品的时候,把这些缓存一并更新就好了。
还有一些状况下,缓存数据并非一个好主意,好比在一个数据被频繁更新的时候,每一次数据的更新,咱们都须要去同时更新缓存,缓存的命中率不高,会致使一些额外的性能牺牲。这种状况下,或许直接查数据库会更好一些。
若是你了解了 Memcached 的工做流程, 你可能已经注意到了,在访问缓存的过程当中,没有任何权限控制的相关流程。若是你的数据不是很是重要的,你大可没必要担忧这方面的安全问题。若是你须要的话,如下几点能够协助你更彻底的使用它:
让咱们来看一个实际的 PHP 例子。下面的代码展现了如何从缓存中取得数据,若是数据不存在,则自动从数据库中查询须要的数据,并将查询到的数据保存到缓存中的过程。
<?php class MyCache { private $cache; function __construct() { $this->cache = new Memcache(); // you can replace localhost by Memcached server IP addr and port no. $this->cache->connect('localhost', 10987); } function get_data($key) { $data = $this->cache->get($key); if($data != null) return $data; else { if($this->cache->getResultCode() == Memcached::RES_NOTFOUND) { //do the databse query here and fetch data $this->cache->set($key,$data_returned_from_database); } else { error_log('No data for key '.$key); } } } } $cache = MyCache(); $cache->get_data('foo'); ?>
要在你的网站使用上面的代码,请先确认你有安装 Memcached 的 PHP 扩展。你能够经过 PECL 来安装对应的开发包。
Memcached 是一个强大的工具,帮忙你创建像 Wikipedia、Flickr、Digg 这样的大型 WEB 应用。只要经过 Memcached 就能够轻松提升你的站点性能,你还等什么?