`
student_lp
  • 浏览: 436555 次
  • 性别: 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
分享到:
评论

相关推荐

    缓存技术

    **缓存技术** 缓存技术在信息技术领域中扮演着至关重要的角色,特别是在性能优化和数据访问速度提升方面。它通过将频繁访问的数据暂时存储在快速...无论是软件开发还是系统架构设计,都需要对缓存有深入的认识和实践。

    大型网站架构演变和知识体系

    这一步涉及缓存架构设计,包括数据结构选择(如 Map)、缓存替换策略(如 FIFO、LRU 或 LFU)、缓存框架的使用和优化等。 **架构演变第五步:增加 WebServer** 随着访问量持续增长,单台 WebServer 可能无法承载...

    Redis的40道面试题.docx

    Redis 的主要特点是其高速性能,支持数据持久化,能够将内存中的数据保存到磁盘,以便在系统重启后继续使用。此外,Redis 提供了多种数据结构,如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)和...

    美拍后端技术演进

    - 缓存系统主要使用了Memcached。 - 存储层主要依赖于Mysql。 - 计数器功能由Redis提供。 - 队列任务则使用Redis作为队列系统。 - 搜索服务由Sphinx实现。 - 图片和视频的存储则依赖云服务提供商。 5. 极简化...

    ThinkPHP2.1 完全开发手册

    8. **缓存机制**:介绍框架内置的缓存机制,如文件缓存、Memcached、Redis等,以及如何配置和使用缓存策略。 9. **助手函数**:列出并解析各种内置的助手函数,这些函数可以简化常见的编程任务,提高开发效率。 10...

    PHP实例开发源码—SHOPEX精仿1号店整站源码 php版.zip

    12. **性能优化**:缓存技术(如Memcached或Redis)、数据库索引优化、代码效率提升等都是保证网站高性能的关键。 13. **部署与维护**:熟悉Linux服务器环境、Apache或Nginx服务器配置、版本控制(如Git)以及故障...

    php本科期末复习资料.zip

    4. PHP性能优化:掌握缓存技术,如APC、Memcached或Redis,以及代码优化技巧。 七、PHP框架应用 介绍一些流行的PHP框架,如Laravel、Symfony、Yii等,理解MVC模式,了解框架中的路由、控制器、模型、视图等概念。 ...

    Redis应用场景--Redis作者谈Redis应用场景

    Redis作为缓存层的优势在于它支持多种数据结构,如字符串、列表、集合、哈希表等,这使得它比传统的缓存系统(如Memcached)更加灵活多样。 - **实现方法**: - 将频繁访问但变化不大的数据存储在Redis中。 - 设置...

    Redis入门及集群环境搭建

    Redis 是一款高性能的键值数据库,它以键值对的形式存储数据,同时也支持多种数据结构如列表、集合、哈希表等。Redis 的优势在于其内存操作和持久化能力,使其成为缓存和快速数据存储的理想选择。在本文中,我们将...

    php论坛系统

    10. **缓存机制**:为了提高性能,论坛系统可能会采用缓存策略,如Redis或Memcached,缓存常用数据,减少数据库查询次数。 11. **API接口**:现代论坛系统可能需要与其他服务集成,如社交媒体分享、第三方登录等,...

    基于PHP的淘宝内部优惠券广告展示系统php版源码.zip

    8. 缓存技术:为了提高性能,系统可能会利用缓存技术,如PHP的APC、Memcached或Redis,来存储频繁访问的数据。 9. 身份验证与授权:如果系统允许用户登录,那么就需要实现身份验证和授权机制。PHP的session或cookie...

    传智博客网上书城

    7. **缓存策略**:为了提高系统性能,可能应用了缓存技术,如Redis或Memcached,缓存热门商品信息和用户会话,减少数据库压力。 8. **搜索引擎优化**:为了提升用户体验和搜索引擎排名,可能会实施SEO(Search ...

    基于PHP的论坛WindForumsUTF8源码.zip

    这可能涉及到PHP的内置缓存功能如APC,或是第三方库如Redis或Memcached。 10. **SEO友好**:WindForumsUTF8可能考虑了搜索引擎优化(SEO),包括静态化URL、元标签设置等,这些都可以从源码中学到。 通过研究...

    毕业设计 计算机专业-PHP校园二手信息网站的设计与开发(源代码+论文)

    9. **性能优化**:通过缓存策略、数据库优化、代码优化等方式提高系统性能,如使用 Memcached 或 Redis 进行数据缓存,减少数据库访问。 10. **响应式设计**:考虑到移动设备的使用,网站需具备响应式设计,能适应...

    数据库知识

    10. **实时数据库与缓存**:理解Redis、Memcached等内存数据库的作用,以及如何在实时数据处理和缓存场景中应用它们。 通过深入学习这些知识点,你可以具备构建、管理和维护高效数据库系统的技能。无论你是初学者...

    十天学会php之第九天

    理解如何使用缓存(如APC或Memcached)、减少数据库查询、优化代码结构和使用适当的算法,都能有效提升网站性能。 在“十天学会PHP”的第九天,你将通过实际案例深入实践这些概念,逐步建立起对PHP的系统认识。记得...

    ITCASTBBS 传知播客BBS源代码

    7. **缓存技术**:为了提高性能,可能会使用内存缓存(如Redis、Memcached)或页面缓存策略来减少数据库访问。这部分知识对于大型网站的性能优化非常重要。 8. **安全措施**:防止SQL注入、XSS攻击和CSRF等网络安全...

    基于PHP实现的网上留言管理系统的设计(源代码+论文)1.rar

    7. **性能优化**:考虑使用缓存技术(如Redis或Memcached)来减少数据库访问,提高系统响应速度。同时,合理的数据库索引和查询优化也是提升性能的关键。 8. **安全性**:除了基本的用户认证,还需要考虑XSS(跨站...

    一份超级全面的PHP面试题

    - **缓存机制**:如Varnish、Memcached等。 - **CDN**:内容分发网络可以将静态资源缓存到全球各地的节点上。 - **数据库优化**:采用主从复制、读写分离等技术。 ### 14. 用PHP写出显示客户端IP与服务器IP的代码...

Global site tag (gtag.js) - Google Analytics