`
student_lp
  • 浏览: 429454 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

认识缓存之Memcached【1】特点结构

阅读更多

一、认识memcached

1、为什么使用memcached

    随着互联网的发展,传统关系型数据库开始出现瓶颈,很多方面不能满足我们的要求:例如:①对数据库的高并发读写;②对海量数据的处理;

2、memcached的特点

    memcached是高性能的分布式内存缓存服务器,通过缓存数据库查询结果,减少数据库访问次数,以提高web应用的速度和扩展性。memcached有如下优点:①协议简单;②基于libevent的事件处理;③内置内存存储方式;④采用不相互通信的分布式。

3、memcached的缺点

    memcached的存储对象并不是持久化的,服务停止之后,里面的数据就会丢失。

4、memcached的典型应用模型


    为了提高性能,Memcached把数据存储到内存中。由于数据仅存在内存中,因此重启后数据丢失。另外,内存容量达到指定值后,就会使用LRU算法自动删除不使用的缓存。Memcached本身为了缓存而设计的服务器,因此没有过多考虑数据的持久化问题。

二、如何支持高并发

    Memcached使用多路复用I/O模型(如epoll、select等)。多路复用I/O是一种消息通知模式,用户连接做好I/O准备后,系统会通知我们这个连接可以进行I/O操作,这样就不会阻塞在某个用户连接。因此,Memcached才能支持高并发。

    此外,Memcached使用了多线程模式。在开启Memcached服务器时通过使用“-t”参数指定要开启的线程数。但并不是线程数越多越好,一般设置为CPU核心数,这样效率最高。

三、数据保存算法

    Memcached默认只能存储不大于1MB的数据。因为Memcached在存储数据时使用Slab内存分配算法。使用这种算法可以减少生成内存碎片,提高内存使用效率等。

    Slab分配算法的原理是:把固定大小(1MB)的内存分配为n小块,每一块(1MB)内存块称为一个slab页。每次向系统申请一个slab页,然后再通过分割算法把这个slab页分割成若干小块的chunk,然后把这些chunk分配给用户使用。chunk块的大小可以不同,但是最大的chunk块的大小就是一个slab分页大小,因此就是1MB,所以Memcached只能存储不大于1MB的数据。

四、淘汰数据方式

    当Memcached使用内存大于设置的最大内存使用数时,为了腾出空间存放新的数据项,Memcached会启用LRU算法淘汰旧的数据项。当Memcached申请内存失败,就开始淘汰数据了。

    淘汰规则是:从数据项列表尾部开始遍历,在列表中查找一个引用计数器为0的条目,该此条目释放掉。为什么会从尾部开始?因为Memcached会把刚刚访问过的条目放到列表头部,所以尾部的条目都是没有被访问过的(或者很少访问的),这就是LRU算法的精髓。

    如果在条目列表中找不到引用计数器为0的条目,就查找一个3小时没有访问过的条目,把他释放。如果找不到,就返回null。

五、多线程模型

    Memcached是一个多线程的缓存服务器程序。在Memcached内部,线程分为:

  • 主线程:接受客户端连接,并把连接分配给工作线程处理。
  • 工作线程:处理客户端连接的请求。
  • 大小: 108.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics