初识memcached

来源:互联网 发布:什么购物软件好 编辑:程序博客网 时间:2024/06/04 18:16

   首先,memcached是服务器(或者称为服务),并且是分布式的服务器。它提供内存key-value对的缓存,所以数据存取比较快。
   其次,memcached缺乏认证以及安全管制,这代表应该将memcached服务器放置在防火墙后。

   第三,为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。

   第四,memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。 各个memcached不会互相通信以共享信息。那么,怎样进行分布式呢? 这完全取决于客户端的实现。

    memcached-0001-02.png

 应用场景:

    许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。 但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、 网站显示延迟等重大影响。
  这时就该memcached大显身手了。通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、 提高可扩展性。 比如,原先的代码是直接访问数据库:

  function get_foo(int userid){

     result = db_select();

     return result; 

}

加上memcached的高速缓存机制后,就变成了:


function get_foo(int userid){

    result = memcached_fetch(...);

    if(!result)

    {

         result = db_select(...);

         memcached_add(...);

        return result;

   }

}

memcached-0001-01.png

假设一个有状态的服务,可以理解为web或者socket服务器,每个用户在这个服务器上登录后是有状态的,我们把它的状态连同其他加载到内存的用户数据统称为用户session。由于session数据会实时变化,加上程序访问session频率大,因此,这个session数据并不适合放到远程memcached中去。