from: http://hi.baidu.com/zhuguoneng/blog/item/aa5fbb3949e766f83b87cee4.html
原始文章 Memcached Internals 是在 2008年MySQL Conf 上的一篇http://www.igvita.com/2008/04/22/mysql-conf-memcached-internals/
本文对memcached的使用提出了一些建议,并讲述了一些memcached内部的一些实现机制。是我们可以更好的理解应用memcached。
MEMCACHED的最佳实践
Memcached是一个高性能的分布式缓存系统,它是独立应用的,当前被许多大型的网站使用,比如Facebook(在2008年第一季度有2TB的缓存), Livejournal, Mixi, Hi5等,然而他也是一个极端简单的软件:所有的逻辑在客户端,没有安全模型,容灾处理,备份机制或持久化。然而这些并不影响他被开发这发布到各种情况的环境中,如下有Brian做的一些关于memcached的最佳时间的建议:
1.不要想行级别(数据库)的缓存,考虑复杂对象。
2.不要在数据库服务器上运行memcached,给你的数据库提供一切可能使用的内存。
3.不要担心TCP的延迟-本机的TCP/IP已经被优化为内存拷贝。
4.考虑 multi-get-在任何可能的情况下用并发来处理事情。
5.不是所有的memcached客户端都是等同的,做你自己的调研。-提示使用
Brians
的。
片分配器-MEMCACHED的心脏
memcached的心脏是他的内存片分配器,第一感觉令人有点畏惧,但是当你明白他架构中所采用的平衡机制等,你会从内心中体会出他确实是一个高雅的解决方案。
1.memcached所能分配的内存最大值仅由系统的架构决定(32/64位)
2.key值大小限制到250字节,data值大小限制到1mb
3.在启动时,memcached获取需要的内存-在性能前浪费内存
4.分配的内存由片分配器切分为不同大小的桶。
5.默认情况下片分配器将创建32-39个桶用来存放最大到1mb大小的对象。
6.你可以在编译时设置页大小,并在启动时设置片大小。
7.每一个被存储的对象存在最相近大小的桶中-是的,内存是被浪费的。
8.碎片是个问题-无论是定义片大小或时常回收/冲刷你的缓存。
9.如果在一个不同的片类中没有未被使用的内存,该内存将在需要的时候被重分配。
10.保证 no-paging,禁用你系统的交换空间(swap)
-实用的是将他变小来避免出问题。
内存管理
内存管理使用的是LRU
算法
1.每一个片类有他自己的LRU-回收目标依赖于对象的大小
2.没秒钟检查一次截止时间戳-最小寿命是1秒
3.异步处理被标志为删除的对象-每5秒检查回收一次
4.上面两个时间的不一致会导致次最佳回收规则
5.可以完全禁用LRU-这样做自己担当风险
关于失效和截止期的最佳实践
Memcached不提供任何关于删除一个相关联key集合(对象,名称等等)的机制.不管是好是坏,你需要在prepend和append命令的帮助下自己实现该功能,然而,需要小心这个1mb 大小的限制。一个非常简单的处理该情况的方式是完全放弃一起失效过程。
1.在任何可能的时候通过设置截止时间来使你的数据失效-memcached会做所有的工作。
2.生成有提示性的key-比如,在更新,添加一个版本号
,将成为key的一部分
3.作为奖励点,在memcached中存储版本号-称作一代
4.后面的将会很快添加到memcached中-只要 Brian 考虑做他。
ROADMAP和未来展望
1.二进制协议在处理中
2.支持代处理-前面章节提到
3.多引擎支持:基于字符的,持久的,队列的
4.Facebook已经修改过的核心,有望被贡献出来。
感谢Brian和Alan的伟大工作,不要忘记做书签并常回来看看(指原文)。
分享到:
相关推荐
描述中的“NULL”意味着没有具体的描述,但我们可以通过标题推测,文章可能包含了作者对这三种缓存技术的个人理解和实践经验,包括但不限于它们的配置、API使用、性能测试和最佳实践。 **标签解析** 1. **源码** -...
9. **最佳实践**:包括如何设计键值对以便于管理和查找,何时应该使用缓存,以及如何在不影响用户体验的情况下优雅地处理缓存失效。 10. **安全性**:虽然memcached主要处理内部缓存,但也要注意数据加密和防火墙...
9. **最佳实践**:遵循缓存设计的最佳实践,如合理设置过期时间、避免热点数据集中、定期清理无用数据等。 通过以上知识点的学习和实践,可以有效地利用Java Memcached客户端与Memcached服务器进行高效的数据交互,...
**基于libevent的事件处理机制**:为了实现高并发性能,Memcached内部采用了libevent库来处理客户端连接上的读写事件,libevent是一个高效的跨平台事件处理框架,支持多种操作系统,如Windows、Linux、BSD和Solaris...
书籍通常会详细介绍Memcached的设计理念、内部机制、最佳实践,以及如何与其他技术(如PHP、Python、Java等)集成。 通过深入学习和实践,我们可以掌握Memcached的高效使用方法,提升Web应用的响应速度和用户体验。...
- **memcached应用经验**:分享在实际应用中使用memcached的经验教训,包括最佳实践和常见问题解决方法。 - **兼容应用程序**:介绍与memcached兼容的其他应用程序,如TokyoTyrant等。 #### 总结 本文全面剖析了...
1. "Memcached的最佳实践和内部机制(译).docx":这份文档深入解析了Memcached的内部工作机制以及如何实施最佳实践。 2. "Memcached Study.pdf":可能包含更全面的Memcached学习指南,包括基本概念、使用方法、优化...
开发者可以通过阅读源码理解其内部机制,包括内存管理、一致性哈希、网络通信等核心部分。 **六、与其他缓存系统的比较** 与Redis相比,Memcached更轻量级,专注于提供简单的键值对存储,而Redis支持更多数据结构...
5. **源码分析**:了解memcached的源码有助于深入理解其内部机制,如内存管理、网络通信、数据序列化等,有助于进行性能优化和二次开发。 6. **性能优化**:可以通过调整内存大小、设置合理的超时时间、优化缓存...
6. **最佳实践**: - 合理设置Memcached的缓存策略,如过期时间、最大内存大小等。 - 使用一致性哈希算法,保证数据在Memcached集群中的分布均匀。 - 监控Memcached的性能,确保其稳定运行,防止内存溢出等问题。...
10. **最佳实践**:分享在单线程模式下优化memcached性能的方法,可能包括调整配置参数、优化数据存储策略等。 由于没有实际的日志文件内容,具体的分析将无法进行。然而,以上知识点提供了全面的背景和框架,帮助...
2. **源码分析**:帮助开发者理解Memcached的内部实现,包括其数据结构、网络通信机制、线程模型和内存管理等。 3. **Memcached命令行工具**:如`telnet`命令行操作,以及如何进行基本的添加、删除、查看缓存项。 ...
6. **缓存系统**:如Redis和Memcached,它们用于存储热点数据,减少对数据库的访问压力,提高响应速度。 7. **消息队列**:如RabbitMQ、ActiveMQ或Kafka,用于异步处理任务,解耦系统组件,提高系统的并发处理能力...
《深入理解Spymemcached-2.10.3:基于Memcached的高效缓存实践》 Memcached作为一款开源的、高性能的内存分布式...在实际项目中,结合最佳实践和持续优化,可以更好地发挥Memcached的潜力,打造快速响应的服务系统。
这个"基于PHP的ThinkPHPPHP框架完整包源码.zip"文件包含了整个ThinkPHP框架的源代码,对于学习和研究ThinkPHP的内部机制,以及进行二次开发,具有很高的参考价值。 一、ThinkPHP框架核心概念 1. MVC架构:ThinkPHP...
在实现缓存策略时,需要注意以下最佳实践: 1. 评估缓存内容的更新频率:并非所有数据都适合缓存。频繁变更的数据会导致缓存失效频繁,反而增加系统开销。 2. 使用适当的有效期:设置过短的缓存时间可能导致缓存...
《MySQL最佳安全配置指导手册》是一份为数据库管理员提供的操作指南,主要目的为帮助...通过实施这些最佳实践,管理员可以有效提升MySQL数据库的安全水平,降低安全事件发生的风险,确保数据的安全性和业务的连续性。
通过对libmemcached-0.23.tar.gz的深入研究,我们可以掌握如何在自己的项目中集成libmemcached,实现高效的数据缓存,提升应用性能,同时学习到分布式缓存系统的设计原理和最佳实践。无论是开发大型Web应用,还是...
源码分析有助于理解缓存的工作原理,例如LRU(Least Recently Used)淘汰策略、Redis或Memcached等缓存系统的内部机制。而工具部分可能涉及使用缓存的软件或库,如Java的Guava Cache、Spring Cache等,以及如何配置...