在上一家公司时,产品主要使用memcached做缓存。
虽然目前这家公司memcached使用的比较少(刚进公司做云存储相关服务时小规模使用了一下,后来做另一个系统时换redis做了缓存),但前几天整理资料时看到了原先写的memcached相关笔记,在此整理一下发上来。
---------------------------------------------------------------
一、Memcached特点:
1、协议简单(基于文本行的协议)。
2、基于libevent的事件处理。
3、内置内存存储方式。
4、Memcached不相互通信的分布式。
注:由于数据保存在内置的内存存储空间中,所以重启memcached会导致全部数据消失。内容容量达到指定值之后,就基于LRU算法自动删除不使用的缓存。Memcached服务器端没有分布式功能,这完全取决于客户端的实现。
二、启动参数:
-p 使用端口,默认11211。
-m 最大内存大小,默认64M。
-vv 用very verbose模式启动,调试信息和错误输出到控制台。
-d 作为daemon在后台启动。
三、Memcached的内存管理机制:
1、默认采用名为Slab Allocator的分配、管理内存机制。
2、该机制出现前,内存的分配是通过对所有记录简单的进行malloc和free来进行的。这种方式会导致内存碎片,加重操作系统内存管理器的负担。
3、Slab Allocator基本原理:按照预先规定的大小,将分配的内存分割成各种特定长度的块,并把尺寸相同的块分成组(chunk的集合),以完全解决内存碎片的问题。
4、Slab Allocator还有重复使用已分配内存的目的,分配的内存不会释放,而是重复利用。
5、Slab Allocator术语:
Page – 分配给Slab的内存空间,默认是1MB,分配给Slab之后跟据Slab大小切分成chunk。
Chunk – 用于缓存数据的内存空间。
Slab Class – 特定大小的chunk组。
Memcached根据收到数据的大小,选择最合适数据大小的Slab,Memcached内会保存slab内空闲chunk的列表。
四、Slab Allocator存在的问题:
由于分配的是特定长度的内存,因此无法有效利用分配的内存。
例如:将100字节的数据存入128字节的chunk,则浪费了28字节。
但如果预先知道客户端发送的数据的公用的大小,或者仅缓存大小相同的数据的情况下。只要使用适合数据大小的组的列表,就可以减少浪费。
五、调优:
启动时指定growth factor因子,就可以在某种程度上控制slab之间的差异,默认值为1.25。
Memcached –f 2 –vv
(查看growth factor为2时slab中chunk size的差异)
Memcached引入时,最好重新计算一下数据的预期平均长度,调整growth factor,以获得最恰当的设置。
六、连接Memcached 控制台:
telnet 主机名 端口号
如:telnet localhost 11211
输入stats回车,查看memcached的状态。
Memcached 软件包中Protocol.txt可以查看协议相关信息。
使用memcached-tool的Perl脚本,可以方便的获得slab的情况。
memcached-tool 主机:端口 选项
七、数据删除:
1、Memcached不会释放已分配的内存,其存储空间可以重复使用。
2、Lazy Expiration:
Memcached内部不会监视数据是否过期,而是在get时查看数据的时间戳,查看数据是否过期。被称为lazy expiration(惰性过期)。
3、当Memcached内存空间不足,即无法从slab class中获取到新的空间时,就从最近未被使用的数据中搜索,将其空间分配给新的数据。(如果要禁用LRU,使用-M参数,超出会报错)。
4、不指定具体值则默认数值为64M。
八、其它:
1、二进制协议:使用理由是不需要文本协议的解析处理,使得memcached性能更高。
2、分布式:将key保存在不同的服务器上。
3、性能可达到:请求最大15000qps,流量400Mbps,连接数超过10000个,性能非常高。
4、分布式hash算法:
(1)取模:
求得键整数的hash值,除以服务器台数,所得的余数决定服务器。
缺点:当添加或者移除服务器时,缓存重组的代价相当巨大,会影响缓存命中率。
(2)Consistent Hashing:
首先求出memcached节点的哈希值,并将其配置到0--2^32的圆上。然后用同样的方法求出存储数据的键的hash值,并映射到圆上。然后从存储数据映射的位置顺时针查找,将数据保存到找到的第一个服务器上。
Consistent Hashing最大程度的抑制了键的重新分布,只有从增加服务器地点到逆时针相邻第一台服务器之间的键会受到影响。
有的Consistent Hashing还采用了虚拟节点的思想,使用一般hash函数的话,服务器的映射地点分布非常不均匀。使用虚拟节点为每个服务器在环上分配100--200个点,这样能抑制分布不均匀,最大限度的减小服务器增减时缓存重新分布。
分享到:
相关推荐
Memcached是一种高性能、分布式内存对象缓存系统,广泛应用于Web应用中...而提供的PDF文档和PPTX文件,将更深入地介绍Memcached的各个方面,包括基础概念、内存管理和集群搭建等,对于学习和掌握Memcached非常有帮助。
**标题与描述解析** 标题“memcached完全剖析ehcache memcached redis 缓存技术总结”表明,这篇内容将深入...通过深入学习这些知识点,读者将能够更好地理解并选择适合自己项目的缓存解决方案,从而提升系统性能。
《深入理解memcached-1.5.16版本》 Memcached是一款高性能、分布式内存对象缓存系统,广泛应用于Web应用中,以减轻...通过深入学习和实践,我们可以充分利用memcached的优势,为我们的项目构建稳固而快速的缓存层。
**Memcached程序与PHP中的应用** Memcached是一种高性能的分布式内存对象缓存系统,用于减少数据库负载,提高...同时,配合`学习文档Url.txt`中的指南,开发者可以更深入地理解和掌握Memcached在实际项目中的应用。
在这个"memcached连接demo"中,我们将深入探讨如何在不同的编程语言中与Memcached进行交互。 首先,让我们了解Memcached的基本概念。Memcached基于简单的键值对存储机制,它将数据存储在内存中,以提供快速的数据...
10. **进一步学习资源**:推荐其他教程、文档或社区,以便读者深入研究。 总结,本文应该涵盖了从安装memcached到在Java应用中使用它的全面指南,包括相关配置、操作、最佳实践和优化技巧,旨在帮助开发者充分利用...
总结,Memcached作为一款轻量级的缓存解决方案,其高效、简单的设计使其成为Web开发中的热门选择。理解并熟练掌握Memcached的使用,能够有效地提升Web应用的性能,减轻数据库的压力。通过阅读源码,开发者还可以...
在提供的文件"memcache学习总结(java版-winwods).docx"中,可能详细介绍了如何在Windows环境下使用Java来操作Memcached,包括安装步骤、配置以及基本的增删查改操作。 至于"Memcached_1.2.5.zip",这应该是...
通过深入学习和理解源码,我们可以更好地掌握如何在项目中使用Memcached作为Hibernate的二级缓存,从而提升系统的数据访问性能。在实际开发中,根据项目需求,可能还需要考虑缓存的扩展性、并发控制以及失效策略等...
【PHP Memcached缓存技术详解】...总结,韩顺平老师的PHP Memcached教程涵盖了从基础操作到高级特性的全面讲解,是学习和掌握这一技术的良好资源。通过实践这些知识,开发者可以有效地利用Memcached提升PHP应用的性能。
【memcached的学习过程】 ...通过实际操作和测试,可以更深入地掌握memcached的功能和价值。在后续的学习中,还可以探索memcached的集群搭建、性能调优等高级话题,进一步提升其在项目中的应用能力。
这个“Memcached分布式缓存入门”资料将引导初学者深入理解Memcached的核心概念、工作原理以及实际应用。 **一、Memcached的基本概念** 1. **缓存**:缓存是一种存储技术,用于临时存储常用数据,以便快速访问。在...
**Memcached缓存系统 v1.6.23...通过深入学习和实践,我们可以更好地理解和利用这一强大的缓存系统。对于开发人员,源代码分析可以提供宝贵的参考和学习机会,而“建站模板”则提示了Memcached在实际项目中的应用方向。
总结来说,这个压缩包包含了一个完整的Memcached .NET客户端库的开发环境,包括源代码、测试用例和示例应用,对于学习和使用Enyim.Caching,或者深入理解Memcached工作原理的开发者来说,是非常有价值的资源。...
总结来说,《Apache, MySQL, memcached和Perl开发Web应用程序》是一本全面的教程,涵盖了Web开发中的关键技术和实践。无论是初学者还是有经验的开发者,都能从中获得宝贵的知识,提升自己的Web开发能力。通过学习这...
Memcached的源代码简洁明了,对于理解分布式缓存的工作原理和内存管理有很好的学习价值。通过阅读源码,可以深入了解其内部机制,如哈希表的实现、内存分配策略、网络通信细节等。 总结来说,Memcached是一个高效的...
本文将深入探讨"dot net memcached 分布式缓存应用类库"的相关知识点。 首先,我们来看标题中的"dot net memcached",这指的是.NET平台下的Memcached客户端库。这类库允许.NET开发者在他们的应用中方便地与...
这暗示了文档内容可能是实践经验的总结,可能包括常见问题、最佳实践以及优化策略等,对于学习和理解如何在实际项目中应用Memcached会有很大的帮助。 **标签解读:** - **C#**:这个标签表明该资源可能涉及到使用...
总结,tencentcloud-sdk-python-memcached是腾讯云为Python开发者提供的一套高效、易用的Memcached服务管理工具,它简化了与云端Memcached服务的交互过程,提升了开发效率。结合Python的灵活性和腾讯云的强大服务,...