- 浏览: 69514 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (121)
- luence (7)
- MoveLuceneRebuild (0)
- ehcache (0)
- memcached (12)
- WeiXin (1)
- hy (0)
- alipay (0)
- Wxap (0)
- 学习笔记 (14)
- java generic (1)
- threadpool (0)
- Awmazon (0)
- com.yulong.businessCache (0)
- com.yulong.util (1)
- com.wxap (0)
- com.yulong.wxshop (0)
- com.alipay (0)
- com.yulong.session (0)
- com.yulong.handler (0)
- kafka (0)
- http://www.cnblogs.com/oubo/archive/2012/02/04/2394646.html (0)
- redis (0)
- MongoDB (2)
- Nginx (1)
- java (10)
- 云搜索 (4)
- Hadoop (1)
- Spring (15)
- Thread (1)
- 博客链接 (0)
- AJAX与CSS (7)
- 项目管理 (1)
- restful架构 (1)
- 多线程 (3)
- Java面试 (6)
- 牛人博客 (2)
- Linux (1)
- java集合 (1)
- Socket与Nio (1)
- SQL开发 (2)
- Spring Boot (3)
- Spring4.1 (4)
- tomcat配置 (1)
- JVM (5)
- Hibernate (1)
- Dubbo (7)
- MQ (2)
- java常见错误 (0)
最新评论
工作原理
基本概念:slab,page,chunk。
slab,是一个逻辑概念。它是在启动memcached实例的时候预处理好的,每个slab对应一个chunk size,也就是说不同slab有不同的chunk size。具体分配多少个slab由参数 -f (增长因子)和 -n (chunk最小尺寸)决定的。
page,可以理解为内存页。大小固定为1m。slab会在存储请求时向系统申请page,并将page按chunk size进行切割。
chunk,是保存用户数据的最小单位。用户数据item(包括key,value)最终会保存到chunk内。chunk规格是固定的,如果用户数据放进来后还有剩余则这剩余部分不能做其他用途。
工作流程:memcahed实例启动,根据 -f 和 -n 进行预分配slab。以 -n 为最小值开始,以 -f 为比值生成等比数列,直到1m为止(每个slab的chunk size都要按8的倍数进行补全,比如:如果按比值算是556的话,会再加4到560成为8的整倍数)。然后每个slab分配一个page。当用户发来存储请求时(key,value),memcached会计算key+value的大小,看看属于哪个slab。确定slab后看里面的是否有空闲chunk放key+value,如果不够就再向系统申请一个page(如果此时已经达到 -m 参数设置的内存使用上限,则看是否设置了 -M 。如果设置了 -M 则返回错误提示,否则按LRU算法删除数据)。申请后将该page按本slab的chunk size 进行切割,然后分配一个来存放用户数据。
注意:
1,chunk是在page里面划分的,而page固定为1m,所以chunk最大不能超过1m。
2,chunk实际占用内存要加48B,因为chunk数据结构本身需要占用48B。
3,如果用户数据大于1m,则memcached会将其切割,放到多个chunk内。
4,已分配出去的page不能回收。
优化建议
1,-n 参数的设置,注意将此参数设置为1024可以整除的数(还要考虑48B的差值),否则余下来的部分就浪费了。
2,不要存储超过1m的数据。因为要拆成多个chunk,计算和时间成本都成倍增加。
3,善用stats命令查看memcached状态。
4,消灭eviction(被删除的数据)。造成eviction是因为内存不够,有三个思路:一是在CPU有余力的情况下开启压缩(PHP扩展);二是增加内存;三是调整 -f 参数,减少内存浪费。
5,调整业务代码,提高命中率。
6,缓存小数据。省带宽,省网络I/O时间,省内存。
7,根据业务特点,为数据尺寸区间小的业务分配专用的memcached实例。这样可以调小 -f 参数,使数据集中存在少数几个slab上,内存浪费较少。
memcached的基本设置:
-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助
基本概念:slab,page,chunk。
slab,是一个逻辑概念。它是在启动memcached实例的时候预处理好的,每个slab对应一个chunk size,也就是说不同slab有不同的chunk size。具体分配多少个slab由参数 -f (增长因子)和 -n (chunk最小尺寸)决定的。
page,可以理解为内存页。大小固定为1m。slab会在存储请求时向系统申请page,并将page按chunk size进行切割。
chunk,是保存用户数据的最小单位。用户数据item(包括key,value)最终会保存到chunk内。chunk规格是固定的,如果用户数据放进来后还有剩余则这剩余部分不能做其他用途。
工作流程:memcahed实例启动,根据 -f 和 -n 进行预分配slab。以 -n 为最小值开始,以 -f 为比值生成等比数列,直到1m为止(每个slab的chunk size都要按8的倍数进行补全,比如:如果按比值算是556的话,会再加4到560成为8的整倍数)。然后每个slab分配一个page。当用户发来存储请求时(key,value),memcached会计算key+value的大小,看看属于哪个slab。确定slab后看里面的是否有空闲chunk放key+value,如果不够就再向系统申请一个page(如果此时已经达到 -m 参数设置的内存使用上限,则看是否设置了 -M 。如果设置了 -M 则返回错误提示,否则按LRU算法删除数据)。申请后将该page按本slab的chunk size 进行切割,然后分配一个来存放用户数据。
注意:
1,chunk是在page里面划分的,而page固定为1m,所以chunk最大不能超过1m。
2,chunk实际占用内存要加48B,因为chunk数据结构本身需要占用48B。
3,如果用户数据大于1m,则memcached会将其切割,放到多个chunk内。
4,已分配出去的page不能回收。
优化建议
1,-n 参数的设置,注意将此参数设置为1024可以整除的数(还要考虑48B的差值),否则余下来的部分就浪费了。
2,不要存储超过1m的数据。因为要拆成多个chunk,计算和时间成本都成倍增加。
3,善用stats命令查看memcached状态。
4,消灭eviction(被删除的数据)。造成eviction是因为内存不够,有三个思路:一是在CPU有余力的情况下开启压缩(PHP扩展);二是增加内存;三是调整 -f 参数,减少内存浪费。
5,调整业务代码,提高命中率。
6,缓存小数据。省带宽,省网络I/O时间,省内存。
7,根据业务特点,为数据尺寸区间小的业务分配专用的memcached实例。这样可以调小 -f 参数,使数据集中存在少数几个slab上,内存浪费较少。
memcached的基本设置:
-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助
发表评论
-
Memcached处理
2015-07-21 14:00 363Memcached有两个核心 ... -
TestMemcached
2014-11-10 09:08 391/** * Copyright (c) 2008 Greg ... -
MemcachedTest
2014-11-10 09:08 320/** * Copyright (c) 2008 Greg ... -
MemcachedBench
2014-11-10 09:09 384/** * Copyright (c) 2008 Greg ... -
MemcachedService
2014-11-10 09:10 459package com.yulong.memcached.se ... -
TestDropMemcacheUser
2014-11-10 09:10 478package com.yulong.memcached; ... -
TestAddMemcacheMemberAddress
2014-11-12 09:23 235package com.yulong.memcached; ... -
SockIOPool
2014-11-12 09:24 1443/** * Copyright (c) 2008 Greg ... -
NestedIOException
2014-11-12 09:24 805/** * Copyright (c) 2008 Greg ... -
NativeHandler
2014-11-12 09:24 281/** * Copyright (c) 2008 Greg ... -
MemcachedClient
2014-11-12 09:24 1812/** * Copyright (c) 2008 Greg ... -
MccErrorHandler
2014-11-07 22:10 0package com.yulong.memcached; ... -
Logger
2014-11-07 22:10 0/** * Copyright (c) 2008 Greg ... -
LineInputStream
2014-11-07 22:10 0/** * Copyright (c) 2008 Greg ... -
ErrorHandler
2014-11-07 22:09 0/** * Copyright (c) 2008 Greg ... -
ContextObjectInputStream
2014-11-07 22:09 0/** * Copyright (c) 2008 Greg ... -
ByteBufArrayInputStream
2014-11-07 22:08 0/** * Copyright (c) 2008 Greg ... -
MemberInfoMemcachedService
2014-11-07 17:55 0package com.yulong.memcached.se ... -
GrabMemcachedService
2014-11-07 17:50 0package com.yulong.memcached.se ...
相关推荐
**Java 客户端封装与优化** 在实际使用中,通常会开发 Java 客户端库来封装 Memcached 的操作,提供更方便的 API。封装过程可能包括: 1. **连接池管理**:为了提高性能,客户端可以使用连接池管理多个到 ...
本资料包包含“Memcached实例与文档”,是学习和理解Memcached工作原理及应用的重要资源。 一、Memcached的基本概念 Memcached基于键值对(key-value)存储,提供简单的文本协议,易于与其他编程语言集成。它的设计...
### Memcached原理和使用详解 #### Memcached简介 Memcached是一种高性能、分布式内存对象缓存系统,由LiveJournal的开发团队开发,旨在通过缓存数据库查询结果和其他计算结果来减轻数据库负担,从而提高动态Web...
本文将深入探讨Memcached中的内存分配原理及SLAB机制的核心概念。通过详细分析Memcached如何管理内存资源,帮助读者理解其高效内存利用背后的逻辑。 #### 第2章 SLAB机制 SLAB机制是Memcached内存管理的关键组成...
**memcached的工作原理**: 1. **分布式存储**:memcached基于键值对(key-value)存储,支持多服务器环境下的分布式缓存。当数据被存储时,它会被分配到集群中的某个节点,根据哈希算法确定存放位置。 2. **内存存储*...
10. **最佳实践** - 提供关于如何有效地利用缓存,避免性能瓶颈,以及如何优化缓存策略的建议。 通过深入学习这些知识点,读者将能够更好地理解并选择适合自己项目的缓存解决方案,从而提升系统性能。
**Windows平台上的...总结来说,Windows上的Memcached安装和使用并不复杂,只需理解其工作原理和基本操作,就能有效地利用它提升应用性能。在实际应用中,应结合具体情况灵活调整配置和使用策略,以达到最佳效果。
在本文中,我们将深入探讨Memcached的实现原理、工作方式以及适用场景,同时结合BSM_Memcache扩展进行实例分析,以期增进对其深入的理解,并能根据需求进行优化。 **Memcached的核心特性** 1. **分布式特性**:...
它的工作原理是将数据存储在内存中,以键值对的形式提供快速访问,特别适合于处理大量小型数据。在Linux环境下,Memcached的使用相当普遍,但在Windows平台上,虽然相对较少,但也提供了支持。本文将详细介绍如何在...
它的工作原理是将数据存储在内存中,以便快速检索,从而实现高速的数据访问。由于Memcached的设计简单而高效,它已经成为许多大型网站和应用程序首选的缓存解决方案。 在Windows环境下安装和使用Memcached可能会与...
它的工作原理是将数据存储在内存中,以便快速检索,从而减少对数据库的直接访问。由于 Memcached 的轻量级设计和简单架构,它可以在多种操作系统上运行,包括Windows。 **安装与配置** 在Windows环境下使用...
它的工作原理是将数据存储在内存中,以便快速检索,从而实现高速的数据缓存。Memcached特别适合处理大量数据的短暂缓存需求,比如网站会话信息、热门内容等。 在Windows环境中部署Memcached,我们可以使用提供的...
- **SQL**:可能讨论了Memcached与关系型数据库(如SQL)的协同工作,例如作为数据库查询结果的缓存层,以提高性能。 - **DBA**:数据库管理员可能会对如何使用Memcached进行数据库负载减轻、性能优化等内容感兴趣。...
### memcached完全剖析知识点概述 #### 1. memcached是什么? - **定义**: memcached是一种高性能、...对于开发者来说,深入理解和掌握memcached的工作原理和技术细节,将有助于更好地利用它来提升应用程序的性能。
根据给定文件的部分内容,我们可以总结出以下有关Memcached的关键知识点: ## Memcached概述 ### 1.1 Memcached简介 ...通过理解其工作原理和操作方式,开发者可以有效地利用这一工具来优化应用程序的性能。
8. **结果分析**:基于日志文件,分析测试结果,包括性能瓶颈、优化建议,以及对比多线程与单线程的性能差异。 9. **源码分析**:如果涉及,可能会讲解memcached源码中与性能相关的部分,比如内存管理、数据结构...
- **优化建议**:在查询中尽量使用 `EXISTS` 或 `NOT EXISTS` 替代 `IN` 或 `NOT IN`,前者通常更高效。 - **原理分析**:当使用 `IN` 或 `NOT IN` 时,数据库需要遍历整个列表,而 `EXISTS` 或 `NOT EXISTS` 只需...
"Java优化大师1.0.exe"可能包含了上述部分或全部优化技术的自动化工具,能够分析Java应用程序的性能瓶颈,并提供优化建议。使用这样的工具,开发者可以更便捷地找到性能问题并进行修复,从而提升整体应用的性能。...
在进行大型项目开发时,性能优化是至关重要的,特别是对于基于SSH(Struts、Spring、Hibernate)这样的...通过深入理解框架的工作原理,并结合项目实际需求,可以找到合适的优化策略,提高系统的运行效率和开发效率。