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

深入研究memcache 特性和限制

 
阅读更多
转自 http://hi.baidu.com/jqxw4444/item/59c33ea3656ede3e020a4d1c

特性和限制
在 Memcached中可以保存的item数据量是没有限制的,只要内存足够 。

Memcached单进程最大使用内存为2G,要使用更多内存,可以分多个端口开启多个Memcached进程,最大30天的数据过期时间,设置为永久的也会在这个时间过期

常量REALTIME_MAXDELTA 60*60*24*30控制最大键长为250字节,大于该长度无法存储

常量KEY_MAX_LENGTH 250控制单个item最大数据是1MB,超过1MB数据不予存储

常量POWER_BLOCK 1048576进行控制,它是默认的slab大小 最大同时连接数是200,通过 conn_init()中的freetotal进行控制,最大软连接数是1024,通过settings.maxconns=1024 进行控制跟空间占用相关的参数:settings.factor=1.25, settings.chunk_size=48, 影响slab的数据占用和步进方式memcached是一种无阻塞的socket通信方式服务,基于libevent库,由于无阻塞通信,对内存读写速度非常之快。

memcached分服务器端和客户端,可以配置多个服务器端和客户端,应用于分布式的服务非常广泛。
memcached作为小规模的数据分布式平台是十分有效果的。

memcached是键值一一对应,key默认最大不能超过128个字 节,value默认大小是1M,也就是一个slabs,如果要存2M的值(连续的),不能用两个slabs,因为两个slabs不是连续的,无法在内存中 存储,故需要修改slabs的大小,多个key和value进行存储时,即使这个slabs没有利用完,那么也不会存放别的数据。


# /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid

-d选项是启动一个守护进程,
-m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,
-u是运行Memcache的用户,我这里是root,
-l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.0.200,
-p是设置Memcache监听的端口,我这里设置了12000,最好是1024以上的端口,
-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,
-P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid,

2)如果要结束Memcache进程,执行:

# kill `cat /tmp/memcached.pid`



Memcache使用了Slab Allocator的内存分配机制:按照预先规定的大小,将分配的内存分割成特定长度的块,以完全解决内存碎片问题。Memcache的存储涉及到slab,page,chunk三个概念
1.Chunk为固定大小的内存空间,默认为96Byte。
2.page对应实际的物理空间,1个page为1M。
3.同样大小的chunk又称为slab。
Memcached再启动的时候根据-n和-f参数,产生若干slab。具体应用中Memcache每次申请1page,并将这1M空间分割成若干个chunk,这些chunk有着同样的大小,属于同一个slab。

【添加】

通过memcache添加item的时候:
1. Memcache计算item的大小(key+value+flags),选取合适的slab(刚好能放下该item的slab)
2. 如果这个item对应的slab未出现过,则申请1个page(注意,这1M空间不论是否达到memcached使用内存都可以申请成功)并加该item存入slab中的chunk
3. 如果item对应的slab出现过,则在该slab中优先选择expired(free_chunks)和delete(在1.2.2中delete的chunk存在着不能被重复利用的问题)的chunk进行存储,其次将选择未使用过的chunk(free_chunks_end)进行存储。
4. 如果item对应的slab出现过,但是对应的slab已经存储满了,那么会申请一个新的page,这个page被分为对应大小的chunk,继续存储。
5. 如果item对应的slab出现过,但是对应的slab已经存储满了并且memcache也达到了最大内存使用。将使用lru算法,清除item(可能将未过期的item清除)此时会有eviction++

【删除】:
1. Delete操作只是将该chunk置为删除状态,这样在下次使用将优先利用这样的chunk。
【flush】
1. Flush操作相当于将所有的item失效的一个动作。并不会改变memcache内存分配情况。
【一些注意】
1. memcache已经分配的内存不会再主动清理。
2. memcache分配给某个slab的内存页不能再分配给其他slab。
3. flush_all不能重置memcache分配内存页的格局,只是给所有的item置为过期。
4. memcache最大存储的item(key+value)大小限制为1M,这由page大小1M限制
5.由于memcache的分布式是客户端程序通过hash算法得到的key取模来实现,不同的语言可能会采用不同的hash算法,同样的客户端程序也有可能使用相异的方法,因此在多语言、多模块共用同一组memcached服务时,一定要注意在客户端选择相同的hash算法
6.启动memcached时可以通过-M参数禁止LRU替换,在内存用尽时add和set会返回失败
7.memcached启动时指定的是数据存储量,没有包括本身占用的内存、以及为了保存数据而设置的管理空间。因此它占用的内存量会多于启动时指定的内存分配量,这点需要注意。
8.memcache存储的时候对key的长度有限制,php和C的最大长度都是250
分享到:
评论

相关推荐

    Memcache win版 服务器和.net驱动

    安装和配置过程可能包括安装服务、设置端口号、内存限制等步骤,确保Memcache能够在Windows环境下稳定运行。 描述中提到的".net的驱动"是指用于.NET Framework或.NET Core的Memcache客户端库。这些库允许.NET开发者...

    memcache1.2.1 for windows

    2. **Memcache的特性** - 分布式:Memcache可以跨多台服务器分配数据,实现负载均衡。 - 键值对存储:Memcache以键值对的形式存储数据,便于快速查找。 - 数据过期机制:支持设置数据的生存时间,超过该时间后...

    MemCache和Redis缓存介绍

    本文将深入探讨MemCache和Redis的基本概念、特点以及应用场景。 **MemCache** 1. **基本概念**:MemCache是一款开源的高性能、分布式内存对象缓存系统,主要用于减少数据库访问的负载。它通过将数据存储在内存中,...

    【汇总】Memcache

    有许多工具可用于监控和管理Memcache,如`mcstat`、`memcached-top`等,它们可以提供实时的统计信息,帮助我们跟踪和诊断性能问题。 总结来说,Memcache是Web应用提升性能的重要工具,通过理解和掌握其核心原理和...

    memcache安装与基本操作详解

    ### Memcache安装与基本操作详解 #### 一、前言 Memcache是一种高性能的分布式内存对象缓存系统,用于加速动态Web应用,减轻数据库负担。本文将详细介绍如何安装配置...希望本文能帮助您更好地理解和使用Memcache。

    memcache软件和+教程

    - **分布式缓存**:在多台服务器上分布数据存储,提供高可用性和扩展性,Memcache就是一种典型的分布式缓存系统。 2. **安装与配置** - **安装**:Memcache通常可以通过包管理器(如在Ubuntu上的`apt-get`或...

    memcache 5.3.3

    **Memcache 5.3.3 知识点详解** Memcache 是一款广泛使用的高性能分布式内存对象缓存系统,主要用于减少数据库负载,提高网站或...在实际开发中,要根据项目特性和需求进行权衡和优化,以充分发挥 Memcache 的优势。

    memcache_php使用测试

    ### memcache_php使用测试 #### 一、memcache模块概览 **memcache**模块作为高效内存缓存的守护进程,提供了程序式和面向对象...通过深入理解并合理配置memcache,开发者能够构建出更加高效、稳定和可扩展的Web应用。

    memcacheclient-2.0

    作为C++实现的Memcached客户端,它充分利用了C++的特性,如模板、STL容器和异常处理,来构建一个轻量级、高效且易于集成的库。 首先,我们来看看修复的两处关键Bug。在早期版本中,可能存在连接管理的问题,导致在...

    MemCache服务器端和使用说明

    **一、MemCache的特性** 1. **内存存储**:MemCache所有的数据都存储在内存中,避免了磁盘I/O操作,极大地提高了数据读取速度。 2. **分布式**:MemCache可以部署在多台服务器上,通过一致性哈希算法实现数据的...

    window 7memcache安装组件

    在实际项目中,你可以通过设置Memcache的缓存策略、过期时间以及利用Memcache的分布式特性来优化数据存储和检索。例如,可以将频繁访问的数据存储在Memcache中,减少对数据库的依赖。 总结,安装和配置Windows 7上...

    Memcache 1.2.6 for Windows

    2. **分布式特性**:Memcache支持多服务器集群,可以通过一致性哈希策略将数据分布到多个节点,实现负载均衡和高可用性。 3. **数据过期策略**:Memcache允许为每个缓存对象设置一个时间戳,超过该时间后数据将自动...

    win下php-memcache5.4;5.2;5.3扩展和memcache服务端

    - 为了更好地管理和监控Memcache,可以使用第三方工具如`Memcached Top`或`phpMemAdmin`。 - 配置Memcache时,考虑合理的内存分配、过期策略以及负载均衡。 综上所述,"win下php-memcache5.4;5.2;5.3扩展和...

    最新windows版php_memcache.dll和memcache.exe

    最新windows的memcache模块下载 这个模块是平和php5.3的,在我的windowsxp php5.3.5上安装成功 里面有两个php库,一个php_memcache.dll.vc6 和一个php_memcache.dll.vc9 另外一个windows的memcache.exe文件,都是网上...

    MemCache开发说明文档

    2.3 **参考文档**:列出可能参考的相关技术文档、标准或研究资料,为深入学习提供资源。 2.4 **术语与缩写解释**:对文档中出现的专业术语和缩写进行解释,便于非专业读者理解。 **第 3 章 背景介绍** 这部分会详细...

    spring memcache 集成使用

    - **配置连接参数**:配置文件中还设置了多个属性,如`servers`用于指定Memcache服务器地址,`initConn`、`minConn`和`maxConn`分别表示初始化连接数、最小连接数和最大连接数,这些参数对于优化连接管理和提高性能...

    PHP7.x 8.0 memcache dll php_memcache.dll

    4. **性能优化**:memcache的性能受到网络延迟和并发处理能力的影响,合理设置缓存过期时间、选择合适的数据结构以及优化服务器配置都是提升性能的关键。 5. **兼容性问题**:由于`php_memcache.dll`扩展可能不兼容...

    Redis和Memcache的区别总结

    1、Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等; 2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储; 3...

Global site tag (gtag.js) - Google Analytics