一、前言

目前,memcached + mysql的这种存储组合,被广泛地应用到“读多写少”的应用场景上。那么在使用memcached的时候,我们需要注意哪些问题呢?

下面我们来探讨下使用memcached时候应该注意的问题或者可能遇到的问题。(以下简称mc)

  1. 什么时候需要引入mc
  2. 使用什么样的内容更新策略
  3. 内容批量读取的问题如何处理
  4. 如何扩展mc
  5. mc上线后如何进行评估和监控

二、什么时候需要引入mc

这是一个非常简单的问题,当我们的系统性能下降的时候,我们首先要做的就是找出系统的性能瓶颈在哪里。

如何发现cache可以帮助解决问题,那我们就可以考虑引入mc。

一般来讲,mc的作用在于提高响应时间和提高服务的并发性能。

从响应时间的角度看,mc的一次存取时间大概是1-2ms,而mysql的存取时间很多时候是与硬盘的存取时间相关。

mysql本身也有自己的cache,如果存取操作不涉及磁盘的访问,那么mysql的响应时间和mc的响应时间相差无几。

但是如果mysql的cache失效,那么mysql的响应时间则很大程度上依赖于硬盘的访问时间。目前,一块普通的机械硬盘的随机访问时间大概是8-10ms。

从并发性能的角度看,mc单个实例的并发处理性能大概在40w/s左右,而mysql的单实例并发处理性能仅为2000/s左右 。

注:这里的处理性能和系统的资源也是相关。

三、使用什么样的内容更新策略

一般来讲,mc的缓存更新策略主要有write-back和write-through两种。

对于,这两种策略的具体流程这里不在累述。

write-back只有在数据被访问到的时候才会被写入cache,所以这种策略相对来讲会节省内存,数据更新操作的时候时间也会比较短。

但是,它势必会影响缓存的命中率,在高并发的情况下尤其突出。

write-through则是在数据被创建或者更新的时候就直接写入cache,所以数据更新操作的时间会略长,内存的使用量也较多。

但是,如果并发很高,而且更新的数据很快会被使用,那么这种策略是一种不错的选择。

四、如何处理批量读取的问题

在mc的实际应用中,我们可能需要多次读取缓存中的数据才能够获取我们所需要的资源,也即multiget问题。

当我们需要获取100份缓存数据的时候,以一次读取1ms的时间进行计算,如果是同步进行处理需要100ms,所以为了提高并发读取的性能,我们可以选择异步读取的机制。

五、如何扩展mc

当我们的系统运行一段时间后,不可避免地会出现扩容或者减少mc服务器的情况,那么我们应该如何设计mc服务的扩展性呢?

一个很普通的策略就是使用一致性hash策略,但是普通的一致性hash策略会导致memcached服务器的分布不均匀,memcached黑洞问题,memcached闪断造成的数据不一致等问题。

因此我们使用memcached的时候需要设计好如何对memcached进行扩展。

六、mc上线后如何进行评估和监控

mc上线后,我们需要评估我们的缓存是否提高了系统的整体性能,mc的缓存命中率是多少,是否符合我们的预期,内存的利用率是多少。

同时,随着mc性能指标的变化,我们还需要对mc的服务进行调整。

例如:

缓存命中率下降,但是内存的利用率很高时,我们需要如何进行处理?

缓存命中率下降的同时,内存的利用率也在下降的时候,我们需要如何进行处理?

关于memcached的那些事儿的更多相关文章

  1. Memcached 两款.NET客户端的郁闷事儿

    不久以后就要负责一个比较大的项目,有多大?反正就是挺大的.现在处于筹备阶段,我主要负责系统框架搭建,在系统缓存这一块决定采用Http运行时缓存+memcached. memcached 以前用过几次 ...

  2. 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)

    硬盘和内存的作用是什么 硬盘的作用毫无疑问我们大家都清楚,不就是用来存储数据文件的么?如照片.视频.各种文档或等等,肯定也有你喜欢的某位岛国老师的动作片,这个时候无论我们电脑是否关机重启它们永远在那里 ...

  3. 终于等到你---订餐系统之负载均衡(nginx+memcached+ftp上传图片+iis)

    又见毕业 对面工商大学的毕业生叕在拍毕业照了,一个个脸上都挂满了笑容,也许是满意自己四年的修行,也许是期待步入繁华的社会... 恰逢其时的连绵细雨与满天柳絮,似乎也是在映衬他们心中那些离别的忧伤,与对 ...

  4. 【转】Memcached安装

    解析:Memcached是什么? Memcached是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度. 一.软件版本    ...

  5. Memcached应用总结

    Memcached应用总结 memcached是一款高性能的分布式缓存系统,凭借其简单方便的操作,稳定可靠的性能广泛应用于互联网应用中,网上关于memcached介绍的资料也很多,最经典的资料就是&l ...

  6. nginx+memcached+ftp上传图片+iis

    nginx+memcached+ftp上传图片+iis 自毕业以来,一直在现在公司做订餐系统的开发,那会儿没有口碑,没有饿了么,更别说美团外卖,百度外卖了...因为规模都比较小,都是一个服务器包含数据 ...

  7. Python项目使用memcached缓存

    前言许多Web应用都将数据保存到MySQL这样的关系型数据库管理系统中,应用服务器从中读取数据并在浏览器中显示. 但随着数据量的增大.访问的集中,就会出现数据库的负担加重.数据库响应恶化. 网站显示延 ...

  8. redis和memcached有什么区别?redis的线程模型是什么?为什么单线程的redis比多线程的memcached效率要高得多(为什么redis是单线程的但是还可以支撑高并发)?

    1.redis和memcached有什么区别? 这个事儿吧,你可以比较出N多个区别来,但是我还是采取redis作者给出的几个比较吧 1)Redis支持服务器端的数据操作:Redis相比Memcache ...

  9. 面试系列12 redis和memcached有什么区别

    (1)redis和memcached有啥区别 这个事儿吧,你可以比较出N多个区别来,但是我还是采取redis作者给出的几个比较吧 1)Redis支持服务器端的数据操作:Redis相比Memcached ...

随机推荐

  1. linux学习网站

    centos中文站  cnblogs.com/bethal/p/6007962.html 最火软件 veryhuo.com 学网资讯 xue163.com/Network/ linux大神 linux ...

  2. 利用浏览器调试APP中的H5页面

    安卓手机的情况下,可以用chrome浏览器来调试. 打开地址: chrome://inspect/#devices 手机用USB数据线连接电脑,并启动USB调试模式. 只要在APP中打开H5页面,界面 ...

  3. [原创]在HP DL380 G7服务器上部署基于Ubuntu Server 16.04 和 VirtualBox的云平台

    对于一线开发人员来说,一提到虚拟机平台,往往会让人联想到在价格昂贵的服务器上部署VMware vSphere之类软件来实现. 笔者作为一个资深码农,也是一直梦寐着在自己家中打造一个真正的家庭私有云,秒 ...

  4. Html中<Hr>标签、样式的使用和自定义设置

    <Hr>标签中样式的使用和自定义设置... -------------------- ====================== 已经测试过了可以用的Hr样式: <!--这是一部分 ...

  5. Form表单提交,Ajax请求,$http请求的区别

    做过前端同学想必都避免不了要和后台server打交道.而以下这三种与后台交互的方式想必大家都不陌生. Form表单提交,Ajax请求,Angular的$http请求 以前一直搞不清楚什么时候应该用哪种 ...

  6. Ubuntu14.04下搭建VPN服务 -pptp

    在Ubantu下采用PPTP搭建VPN,优点是配置简单快捷.本教程亲自测试,熟练了在新机器上5分钟搞定VPN. - - - - - - - - - - - - - - - - - - - - - - ...

  7. php精简完全小结(linux/laravel篇)

    php官网:http://www.php.netphp版本: 查看:php -version说明:None-Thread Safe就是非线程安全,在执行时不进行线程(thread)安全检查:Threa ...

  8. 深入理解line-height

    什么是行间距? 古时候我们使用印刷机来出来文字.印刷出来的每个字,都位于独立的一个块中. 行间距,即传说中控制两行文字垂直距离的东东.在CSS中,line-height被用来控制行与行之间垂直距离. ...

  9. Java数据库连接池比较(c3p0,dbcp,proxool和BoneCP)

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp21 Java框架数据库连接池比较(c3p0,dbcp和proxool,Bo ...

  10. Navicat连接oracle数据出现的oci问题

    为了用navicat操作数据库,我安装了navicat,安装完后可以连接oracle,mysql,sql service,sqlite,所以这个工具非常好用. 但是在连接数据库的时候报错了:" ...