php分布式缓存系统 Memcached 入门

时间:2022-12-10 14:29:42

Memcached 是一个分布式的缓存系统, 但是 Memcachd 到底是什么意思,有什么作用呢?缓存一般用来保存一些经常被存取的数据和资源(例如:浏览器会将访问过的网页会话缓存起来),因为通过缓存来存取数据要比从磁盘存取同样的数据要快得多。所以 Memcached 顾名思义,意味着 “内存缓存”,所有缓存的内容都在服务器的内存中。内存中的这些缓存数据可以通过 API 的方式被存取。数据是以 key/value 的配对方式存在的,就像一像大的 Hash 表。

分布式是 Memcached 的主要特性,所以你可以在多台服务器上来安装 Memcached 来组建一个更大的缓存服务器。这样一来,Memcached 可以帮助我们使数据库的压力降到最低, 从而我们可以构建出更快的、更具扩展性的 WEB 应用。图一展示了 Memcache 如何与数据库端协同工作的情况。

php分布式缓存系统 Memcached 入门

Memcache 如何工作?

图一展示的流程,相信有开发过数据库应用的同学都不会陌生。我们来一步步的说明图中发生了什么事情:

  1. 检查用户请求的数据是缓存中是否有存在,如果有存在的话,只需要直接把请求的数据返回,这时候跟数据库就完全扯不上关系了。
  2. 如果请求的数据在缓存中找不到,这时候再去查询数据库。返回请求数据的同时,把数据存储到缓存中一份。
  3. 保持缓存的“新鲜性”,每当数据发生变化的时候(比如,数据有被修改,或被删除的情况下),要同步的更新缓存信息,确保用户不会在缓存取到旧的数据。

显而易见,Memcached 在高并发的数据查询和海量数据输出的情况下,可以起到很大的作用。因为访问 Memcached 中的内存数据,要比数据库的磁盘数据快的多。

如何安装 Memcache?

如果你想在自己的服务器上尝试使用 Memcached,第一步就是要在你的服务器上安装 Memcached 的相关组件。好在Memcached 在很多服务器的发行版软件上都已经被预安装了。你可以通过在 Shell 下执行下面的命令,来检查你的服务器上有没有被预安装了 Memcached:

memcached -h

如果 Memcached 有被安装过,上面的命令会输出已经安装的版本号信息及一些帮助信息,否则则会返回一个错误。

下面以 CentOs 发行版为例,简单介绍一下如何安装 Memcached。

yum install memcached 上面的命令会在线搜索并安装最新的 Memcached 包。

Memcache 在什么情况下被使用,什么情况下不要使用?

你在何时应该使用 Memcache,又要在何时避免使用它?现在你已经知道了,Memcahced 是被设计为减轻数据库端压力的。但是你最好能制定一个良好的策略,来想办法让 Memcached 来尽可能的缓存那些最影响性能的查询。你可以试着为应用中的所有查询做一些执行时间日志,可以帮助你来分析哪些内容是要重点被缓存的。

现在假设你正在运营一个电子商务网站。 你可以在 Memcached 中缓存产品的简介、运送信息,或者其它一些需要复杂查询的数据,等等。当一个产品页被加载的时候,上面提到的数据将会跳过数据库查询,直接从缓存中取得。 缓存可以大大的改变你的网站整体性能表现,你只需要记得在后台更新产品的时候,把这些缓存一并更新就行了。

还有一些情况下,缓存数据并不是一个好主意,比如在一个数据被频繁更新的时候,每一次数据的更新,我们都需要去同时更新缓存,缓存的命中率不高,会导致一些额外的性能牺牲。这种情况下,或许直接查数据库会更好一些。

Memcached 的安全性

如果你了解了 Memcached 的工作流程, 你可能已经注意到了,在访问缓存的过程中,没有任何权限控制的相关流程。如果你的数据不是非常重要的,你大可不必担心这方面的安全问题。如果你需要的话,以下几点可以协助你更完全的使用它:

  1. 使用唯一的 Key:因为在 Memcached 中的数据是以一个大的数组形式存在的,所以你应该使用唯一的 key。访问你的数据的唯一办法就是通过你保存数据时的 key,除此之外再没有其它可查询的办法。
  2. 保证你的 Memcached 器安全: 因为 Memcached 本身并没有身份验证机制,所以对 Memcached 的服务器查询,都应该通过防火墙进行。你可以在防火墙上设定规则,哪些服务器是允许被访问的,哪些是不允许被访问的。
  3. 加密你的数据: 你可以将数据和 Key 通过加密的方式保存在 Memcached 中。 这需要花费一些额外的 CPU 时间,但是为了你的数据安全,在情况允许的情况下,这个方法值得你去尝试。Memcached 代码实例

Memcached 代码实例

让我们来看一个实际的 PHP 例子。下面的代码展示了如何从缓存中取得数据,如果数据不存在,则自动从数据库中查询需要的数据,并将查询到的数据保存到缓存中的过程。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?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 就可以轻松提高你的站点性能,你还等什么?

转:http://blog.csdn.net/jucrazy/article/details/6693407

php分布式缓存系统 Memcached 入门的更多相关文章

  1. 分布式缓存系统 Memcached 整体架构

    分布式缓存系统 Memcached整体架构 Memcached经验分享[架构方向] Memcached 及 Redis 架构分析和比较

  2. 分布式缓存系统 Memcached 快速入门

    Memcached介绍   官网地址      Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提 ...

  3. 分布式缓存系统Memcached简介与实践

    缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵 ...

  4. 分布式缓存系统Memcached简介与实践&lpar;&period;NET memcached client library&rpar;

    缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵 ...

  5. &lbrack;Memcached&rsqb;分布式缓存系统Memcached在Asp&period;net下的应用

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached ...

  6. (转)C&num; 中使用分布式缓存系统Memcached

    转自:http://blog.csdn.net/devgis/article/details/8212917 缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了 ...

  7. 分布式缓存系统Memcached在Asp&period;net下的应用

    Memcached 是一个高性能的分布式内存对象缓存系统.用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来降低读取数据库的次数,从而提高动态.数据库驱动站点的速度. Memcache ...

  8. 分布式缓存系统Memcached简介与以及在&period;net下的实践&lpar;转&rpar;

    缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵 ...

  9. 分布式缓存系统Memcached&lbrack;分享&rsqb;

    个人网站:http://www.51pansou.com memcached视频下载:memcached视频教程 memcached源码下载:memcached源码 Memcached是什么? Mem ...

随机推荐

  1. python函数基础 与文件操作

    函数的定义 函数是通过赋值传递的,参数通过赋值传递给函数.def语句将创建一个函数对象并将其赋值给一个变量名,def语句的一般格式如下: def function_name(arg1,arg2[,.. ...

  2. Qt搭建多线程Server

    起因是MySQL在Android上没有驱动.也就是说,移动端想要访问远程数据库,必须通过一台(或多台)PC进行中转. 中转PC作为Server,接受来自移动端Socket访问数据库的要求,Server ...

  3. bxSlider 在网页里添加幻灯片效果

    幻灯片效果在网页上很常见,本文介绍用 bxSlider 轻松实现的方法. bxSlider是什么 bxSlider 是用 JQuery 和 CSS 实现网页中幻灯片效果的工具.可在 http://bx ...

  4. 查看&sol;修改 Linux 时间和时区

    查看/修改Linux时区和时间 一.时区      1. 查看当前时区                 date -R      2. 修改设置时区          方法(1)            ...

  5. jquery简单的大背景banner图片全屏切换

    详细内容请点击 这个是我初毕业刚进公司那会帮同事(同时也是同学)写的一个PC端的全屏图片切换效果,对于刚毕业的我来说写出来那会的喜悦之情是无法言表的,那时的我还是什么不懂的小白白,俗称菜鸟.个人网站上 ...

  6. AWS 之 S3篇&lt&semi;&period;NET&lpar;c&num;&rpar;批量上传文件&gt&semi;

    第一次知道AWS然后网上就研究了一番,如果也是第一次知道这个的话,或者对这个只知道是干什么,并没有写个相关的程序的话,可以看看这个网址http://docs.aws.amazon.com/zh_cn/ ...

  7. memcache基本讲解

    Memcached技术 介绍: memcached是一种缓存技术, 他可以把你的数据放入内存,从而通过内存访问提速,因为内存最快的, memcached技术的主要目的提速, 在memachec 中维护 ...

  8. linux下环境搭建比较

    xampp是一款初学者使用的集成的apache mysql与php配置安装包了,我们可以利用xampp来快速安装配置php环境,下面一起来看看吧.   要在linux服务器上面挂我们的php网站程序, ...

  9. nodeCZBK-笔记1

    [TOC] ****************************** day01 node简介 Node.js是一个让JavaScript运行在服务器端的开发平台. node就是一个js的执行环境 ...

  10. wpf让图片自适应容器大小,而且又不会拉升变形

    <Grid Grid.Column="3" Margin="0,4,0,0" Background="Black"> <V ...