Memcached初探

一、什么是Memcached

  在数据驱动的Web开发中,经常要重复从数据库中取出相同的数据,这极大的增加了数据库负载。根据“二八原则”,即80%的请求访问了20%的数据,缓存热数据是解决这个问题的好办法。
  Memcached 是一个高性能的分布式内存对象缓存系统,由LiveJournal旗下Danga Interactive公司的Brad Fitzpatric带头开发,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。经过多年发展,现已成为mixi、hatena、Facebook、Vox、LiveJournal等众多应用中提高Web扩展性的重要组件。

二、为什么需要Memcached

  许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。 但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、 网站显示延迟等重大问题。
  Memcached通过缓存热数据,减少数据库访问次数,以提高动态Web应用的速度、 提高可扩展性。图1展示了Memcached的一般性用途:分布式缓存。当浏览器首次请求访问数据时,应用服务器会先从数据库服务器中取得返回给用户,并将其以Key/Value键值对的形式存入Memcached服务器中。当用户第二次访问上次请求的数据时,应用服务器通过在Memcached服务器中查找是否有缓存,如果有则直接从Memcached中读取。由于Memcached服务器将数据存储在内存空间中,所以访问速度比数据库的磁盘IO要快,从而提高了服务响应速度,并且在高峰时间减轻了数据库服务器的负载压力。


图1 Memcached一般性用途
图1 Memcached一般性用途

三、Memcached特点

  • 协议简单
      Memcached服务器与客户端通信并不使用复杂的XML等格式, 而是使用简单的基于文本行的协议。因此,通过telnet 也能在memcached上保存数据、取得数据。

  • 基于libevent的事件处理
      Memcached使用libevent库,因此能在Linux、BSD、Solaris等操作系统上发挥其高性能。

    libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能封装成统一的接口。即使对服务器的连接数增加,也能发挥O(1)的性能。
    libevent: http://www.monkey.org/~provos/libevent/

  • 内置的内存存储
      Memcached将数据存储于内置的内存存储空间中,自己进行内存的管理,而不是通过多次的malloc向系统请求资源。在内存容量不足时,Memcached采用LRU(Least Recently Used)等策略进行内存调度。

    Memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题,重启Memcached、重启操作系统等操作都会导致全部数据消失。

  • 互不通信的分布式
      Memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。 各个memcached不会互相通信以共享信息。Memcached的分布式,完全取决于客户端的实现。如图2,Memcached客户端会通过一个分布式算法(一致性Hash算法)从Memcached服务器列表中计算出一个Memcached服务器的地址(如果是读请求,则根据Key在分布式算法中得到缓存有该Key的Memcached服务器信息),然后客户端将数据(Key/Value对)传递给计算出来的Memcached服务器(如果是读请求,则从计算出来的memcached服务器中读取含有指定Key的数据)。


    图2 Memcached的分布式
    图2 Memcached的分布式

四、Memcached安装与使用

  • Memcached安装
      先安装libevent库,然后安装Memcached

    $ sudo yum install libevent libevent-devel
    $ wget http://www.danga.com/memcached/dist/memcached-1.2.5.tar.gz
    $ tar zxf memcached-1.2.5.tar.gz
    $ cd memcached-1.2.5
    $ ./configure
    $ make
    $ sudo make install

  • 启动Memcached

    $ /usr/local/bin/memcached -p 11211 -m 64m -vv

  Memcached的常用启动选项如下

选项说明
-p使用的TCP端口,默认11211
-m最大内存大小,默认64M
-vv用very vrebose模式启动,调试信息和错误输出到控制台
-d作为daemon在后台启动
  • telnet测试

$ telnet localhost 11211
Trying 127.0.0.1…
Connected to localhost.localdomain (127.0.0.1).
Escape character is ‘^]’.
set foo 0 0 3
bar
STORED
get foo
VALUE foo 0 3
bar

  除了set和get操作,还有delete和replace等操作

五、小结

  我们初步了解了什么是Memcached,以及Memcached有什么用,有什么特点。另外,我们按照了Memcached并通过telnet进行了简单的测试。总而言之,Memcached是一个高性能的Key/Value缓存系统,通过构建Memcached集群,能够适应大型网站的分布式缓存服务需要。

参考文献

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值