一、认识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内部,线程分为:
- 主线程:接受客户端连接,并把连接分配给工作线程处理。
- 工作线程:处理客户端连接的请求。
相关推荐
分布式缓存系统Memcached简介及开发环境搭建
缓存服务器memcached代码及使用文档,里面整理了使用的文章及J2EE项目使用demo。有问题可以联系:http://www.0817home.com/
PHP内存缓存技术memcached 的安装和工作原理介绍
分布式缓存客户端MemcachedProviders最新下载
memcache 用于缓存服务器,大大的提高了页面的加载速度,提高了网站的性能
1.Memcached是什么? Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。Memcached通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括...
memcached缓存使用演示小项目,缓存服务器的搭建,增删改查缓存
集中式缓存系统 memcached ,memcached是一套分布式的快取系统,当初是Danga Interactive为了LiveJou...
memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。 如今,越来越多的Web应用程序开始使用memcached这个高速的...
Memcached分布式缓存简介Memcached分布式缓存简介Memcached分布式缓存简介
ecshop 静态缓存memcached.txtecshop 静态缓存memcached.txtecshop 静态缓存memcached.txt
C#使用memCached实现缓存 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。...
Memcached分布式缓存
这里需要解释说明一下,很多开发者觉得Memcached是一种分布式缓存系统,但是其实Memcached服务端本身是单实例的,只是在客户端实现过程中可以根据存储的主键做分区存储,而这个区就是Memcached服务端的一个或者多个...
memcached 缓存 jar包,tomcat共享缓存可用,java开发数据库缓存也可用。
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的...
ecshop 缓存memcached 分类信息.txt ecshop 缓存memcached 分类信息.txt
ecshop caches缓存 memcached 错误最新修正无错.txt ecshop caches缓存 memcached 错误最新修正无错.txt ecshop caches缓存 memcached 错误最新修正无错.txt
一个php内存缓存Memcached类代码,构造方法,用于添加服务器并创建memcahced对象,获取memcached对象,检查mem是否连接成功,向memcache中添加数据,获取memcahce中保存的数据,删除和同一个表相关的所有缓存。