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

memcache使用细节

阅读更多

 

一 监控
查看memcahe服务器的状态,通常我们使用2个命令
1)telnet 127.0.0.1 11211
查看全局
stats
查看slab
stats slabs
查看item
stats items

2)vmstat 1 -S M


二 使用细节,注意的问题
1)节点过热
如果memcached有个别节点容量耗光,同时并发很大。那么需要重新分配一致性hash的服务器分布。或者增加虚拟节点

2)缓存预热
如果线上压力非常大,memcache集群扩容,我们需要对对新的memcached服务器进行预热,所有客户端要将数据双写入这个新节点里。一般缓存容量的阈值为70-80%

3)分散部署
由于memcache服务器对CPU消耗非常小,基本上在20W/second并发情况下,CPU负载也不会超过1%,因此CPU和磁盘会造成浪费。所以尽可能利用手头多的服务器部署。
例如有100G缓存的需求,初始分配5台20G内存的机器,不如使用10台10G的机器。这样可以提高缓存的绝对并发能力。同时降低单个节点宕机的损失。另外可以提高网络吞吐率。还可以把空闲的磁盘和CPU共享给其他应用来使用。

4)slab、chunk、page、增长因子
chunk中,与48B是chunk本身数据结构的容量,所以chunk设置太小,会导致本身占用过多,大量浪费的现象。但是如果设置过大,也会产生内存碎片。所以这个要酌情处理。
page大小,决定了最大缓存对象,默认是1M。但我们有时候也可以保存超过1M的字符串,xmemcached客户端会对重复的字符串进行压缩。
增长因子很关键,设置过大,过小都会造成浪费。所以要根据缓存对象大小的正太分布。增长率比较合适。memcached启动的时候是不占内存的。只有在使用缓存的时候,一次向操作系统申请一个page的空间。如果在这个page里的slab之中的chunk使用特别少,那么其他空间就成为了内存碎片无法继续分配。

5)缓存雪崩
假设线上有10台memcache的集群,内存负载为80%。如果这个时候宕机3台。那么将会失去80%×30%=24%的缓存数据。持久化层的压力会瞬间加大。导致所有请求处理缓慢,像雪崩一样是整个集群无法工作。所以这个时候我们要预留尽可能多的空闲。因此内存阈值70%是比比较合理的。

6)服务器榨取
案例1:在一台64G内存的服务器上,1个48G内存的memcached
案例2:在一台64G内存的服务器上,4个12G内存的memcached
经过测试显示,案例2的性能比案例1明显提高了50%,服务器处理能可以到 71.5W#/sec

7)缓存穿透
在一定场景下,应用的请求会直接查询DB而返回null。这样会导致DB大量的空查询。压力急剧上升遭受攻击。这个时候,需要将null或者空结果集进行缓存。

分享到:
评论

相关推荐

    memcache使用手册

    Memcache 使用手册 Memcache 是一种高性能的内存键值缓存,它可以为应用程序提供高速的数据访问。Memcache 服务可以通过应用程序...但是,在使用 Memcache 时需要考虑到缓存的策略和实现细节,以确保缓存的正确使用。

    memcache 基本使用-已测试

    标题“memcache基本使用-已测试”涉及到的是一个关于Memcached缓存系统的基础教程或实践经验,其中可能包括如何安装、配置、以及在实际项目中如何使用Memcached来提高应用程序性能。描述中的“NULL”意味着没有提供...

    Memcache 全面剖析,Memcache 教程

    **Memcache 全面剖析与教程** Memcache 是一个高性能的分布式内存对象缓存系统,广泛应用于Web应用中,用于减少数据库访问的负载...阅读“memcached_handbook.pdf”将进一步深入探讨 Memcache 的更多细节和最佳实践。

    memCache源码java客户端

    在Java中,我们可以使用各种客户端库来与memCache进行交互,本文将主要探讨Java客户端的实现细节。 ### 一、memCache客户端库 Java社区提供了多种memCache客户端,如spymemcached、xmemcached、memcached-client等...

    memcache多线程将ORACLE数据流生成扫描件

    标题中的“memcache多线程将ORACLE数据流生成扫描件”揭示了这个技术主题是关于使用Memcache处理Oracle数据库的数据,并且采用了多线程技术。让我们深入了解一下这两个关键概念。 1. Memcache:Memcache是一款广泛...

    memcache服务器监控

    1. **性能指标监控**:监控关键性能指标,如缓存命中率、内存使用情况、连接数、命令执行次数等,以了解Memcache的运行状态。 2. **报警设置**:当特定指标超过预设阈值时,如内存使用接近饱和或请求延迟增加,应...

    自己写的一个php memcache操作类

    在描述中提到的“博文链接:https://yeyuan.iteye.com/blog/1284186”,这可能是一个开发者分享其自定义PHP Memcache类的博客文章,提供了更多的细节和使用示例。由于这里没有实际的描述内容,我们无法获取更多关于...

    C++ MemCacheClient

    MemCacheClient是一个C++实现的Memcached客户端库,它为C++开发者提供了便捷地与Memcached...它简化了与Memcached的交互,提供了高性能、易于使用的API,使开发者能够专注于他们的业务逻辑,而无需关心底层的缓存细节。

    php_memcache-3.0.8-5.3-ts-vc9-x86.zip

    而PHP_Memcache扩展则是PHP与Memcache进行交互的关键工具,本篇文章将深入探讨这个扩展的细节和应用场景。 标题“php_memcache-3.0.8-5.3-ts-vc9-x86.zip”揭示了这个压缩包的具体内容,这是PHP Memcache扩展的...

    PHP MemCache 扩展文件

    PHP MemCache扩展会自动处理这些细节,开发者只需关注数据的存取。 **8. 性能优化** 为了获得最佳性能,应确保Memcached服务器和PHP应用在同一网络环境中,并考虑使用合适的缓存策略,如预加载常用数据,设置合理...

    php_memcache.dll

    的出现,使得PHP开发者无需关心底层通信细节,即可方便地利用Memcache的强大功能。 二、`php_memcache.dll`在不同PHP版本中的兼容性 文件列表中包含了`php_memcache.dll`的三个版本,分别对应PHP5.2、PHP5.3和...

    memcache的源代码.zip感觉自己水平高的,可以下载研究研究

    总结,通过研究Memcached的源代码,我们可以深入理解其设计原则和实现细节,这对于提升开发者的技能,尤其是分布式系统和缓存技术的理解具有重要价值。同时,这种实践也能帮助我们更好地应用和扩展Memcached,解决...

    阿里云 专有云企业版 V3.8.1 云数据库 Memcache 版 技术白皮书 20190910

    云数据库Memcache版技术白皮书涵盖了云数据库Memcache版的技术特点、应用场景和技术优势等内容,旨在帮助读者了解云数据库Memcache版的技术细节和应用场景。 阿里云专有云企业版V3.8.1云数据库Memcache版技术白皮书...

    springmvc配置Memcache缓存Demo

    Spring MVC 是一个流行的Java Web开发框架,用于构建高效、模块化的Web应用程序。...这只是一个基本的配置示例,实际应用中可能需要考虑更多细节,比如过期策略、异常处理以及多服务器环境下的分布式缓存一致性等。

    memcache.zip 缓存jar包

    通常,客户端会封装网络通信细节,使得开发者能够像操作本地数据结构一样操作远程的Memcache服务。 使用这个压缩包的步骤大致如下: 1. **安装服务器**:解压文件,找到Memcache服务器的可执行文件,根据操作系统...

    MemCache Client User Guide

    《MemCache客户端用户指南》是针对使用MemCache客户端进行数据缓存操作的用户提供的详细指导文档。本指南主要涵盖了客户端的基础设置以及集群配置,适用于熟悉Java编程并希望通过MemCache优化应用性能的开发者。 ...

    Python memcache 上传数据

    如果你想要查看`memcache`库的源码,可以通过Python的`help`函数获取更多细节: ```python import memcache help(memcache) ``` 这将显示`memcache`模块的文档字符串和所有可用的类、方法和常量。 总的来说,...

    C语言memcache代码

    在C语言中,我们可以使用libmemcached库来与memcache服务器进行交互。libmemcached是C语言编写的一套完整的客户端库,提供了丰富的接口供开发者使用。 首先,让我们了解一下libmemcached库的基础概念: 1. **连接...

    php_memcache-5.2-ts-win32-vc6-x86

    在描述中,“php_memcache-5.2-ts-win32-vc6-x86”重复了一遍,强调了这个扩展的配置细节。"ts"表示Thread Safety,这意味着这个扩展支持多线程环境,每个线程都有自己的独立数据空间,防止数据冲突。而"win32"表明...

    memcache internals

    本文将深入探讨Memcache的一些核心技术细节,包括其背后的算法和设计原理,帮助读者更全面地理解为什么Memcache能够如此高效。 #### 二、核心特性 ##### 1. Big-O(时间复杂度) - **定义**:大多数Memcache功能...

Global site tag (gtag.js) - Google Analytics