技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 查看专题: Memcached
    得知下厨房的数据被误删了,正在紧张恢复中。作为犯过很多次严重错误的人,我最想说的是,善待当事人吧,此刻他在承受着巨大的压力,比其他任何人都要心焦,他会很感激你的善言和善意。 这几年犯过很多次严重影响线上服务的错误,像重启了错误的节点这样的事情应该算作能够对线上造成影响的最微不足道的错误,就只简单说几件现在都还让我心有余悸的事吧。 停用线上 memcached 集群 在调整 memcached 客户端配置的使用和部署方式之前,尽管经过了多次测试,比如在部分节点先上线,确认没有问题之后上线所有的应用服务器,但还是使用了错误的配置,导致线上所有应用禁用了 memcached,巨大的访问压力瞬间拖垮了数据库,从发现问题到完全恢复持续了将近二十分钟。 软件 bug 导致线上 memcached 集群被污染 上线的代码在特定条件下会禁掉对 memcached 的使用,导致在本应清除 c
    Redis支持服务器端的数据操作:Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。所以,如果需要缓存能够支持更复杂的结构和操作,那么Redis会是不错的选择。
    最近项目中用到PHP连接Memcache的场景。这个场景对于PHP开发者很常见。但就是这么常见的一个场景,带来了意想不到的一个问题。
    阅读 memcached 最好有 libevent 基础, memcached 是基于 libevent 构建起来的. 通由 libevent 提供的事件驱动机制触发 memcached 中的 IO 事件.
    为了规避内存碎片问题,Memcached采用了名为SlabAllocator的内存分配机制。内存以Page为单位来分配,每个Page分给一个特定长度的Slab来使用,每个Slab包含若干个特定长度的Chunk。实际保存数据时,会根据数据的大小选择一个最贴切的Slab,并把数据保存在对应的Chunk中。如果某个Slab没有剩余的Chunk了,系统便会给这个Slab分配一个新的Page以供使用,如果没有Page可用,系统就会触发LRU机制,通过删除冷数据来为新数据腾出空间,这里有一点需要注意的是:LRU不是全局的,而是针对Slab而言的。
    Memcached是一种应用较广泛的分布式内存对象缓存系统,应用之余总想了解它的实现机理,这也就是开源的好处,以至于每接触一款优秀的开源软件都有去阅读它源代码的冲动,Memcached-1.4.7的代码量还是可以接受的,只有10K行左右,我比较关心的两个方面还是它的进程(线程)管理机制和内存管理机制,这里先简单写一下我对Memcached进程管理方面的理解。 Memcached使用libevent实现事件循环,libevent在Linux环境下默认采用epoll作为IO多路复用方法,这个不重要,接下来要讨论的是Memcached的进程管理模型。
    Memcached的内存管理在网上也可以搜集到不少不错的文章,新浪的这篇《Memcached深度分析》讲得不错,读别人的文章还是不如自己直接去读源码分析源码来得直接,这里写一下我阅读Memcached源码时对于Memcached内存管理机制的理解。 Memcached的代码结构很简单,从main()函数入口进去之后便是几个模块的初始化函数,和内存管理相关的主要有两个函数,一个是assoc_init(),这个是用来初始化哈希表的,关于这个哈希表的作用留在外面讨论,另一个是slabs_init(),该函数用来初始化slab,下面先来讨论一下slab机制。
    题外话最近计划对Memcached做一些尝试性的改造,主要是针对Memcached在处理过期数据的时候进行改造,以实现在一个缓存的过期时间达到的时候,可以对该缓存的数据进行一个验证和存储的处理。 ...
    维基百科上对 Memcached 的介绍是一个分布式的缓存系统, 但是 Memcachd 到底是什么意思,有什么作用呢?缓存一般用来保存一些经常被存取的数据和资源(例如:浏览器会将访问过的网页会话缓存起来),因为通过缓存来存取数据要比从磁盘存取同样的数据要快得多。所以 Memcached 顾名思义,意味着 “内存缓存”,所有缓存的内容都在服务器的内存中。内存中的这些缓存数据可以通过 API 的方式被存取。数据是以 key/value 的配对方式...
    优化过语句1和语句2后,首页的平均生成时间已经降低到0.02秒,和discuz一个量级了;再经过语句3的优化,最终结果是首页生成时间降低到了0.006秒左右,经过memcached寥寥几行代码的优化,性能提高了3300%。终于可以挺直腰板来看Discuz了:)
说memcached是妖孽,并不是因为memcached应用了之后性能狂升――这本是意料之中的事情,不这样反而才奇怪――而是因为我基本上没花多少时间就实现了这么妖孽的效果,至少我花的时间并不比写这篇blog的时间多。那么方便的使用方法和那么显著的性能提升状况真是让人咋舌。
    因为python的模板使用了python来获取数据,所以需要安装python环境以及python的memcached客户端1.安装ez_setup工具wget -q http://peak.telecommunity.com/dist/ez_setup.pypython ez_setup.py2.安装python的memcached客户端wget ftp://ftp.tummy.com/pub/python-memcached/python-memcached-1.45.tar.gztar -zxvf python-memcached-1.45.tar.gzcd python-memcached-1.45python setup.py install3.下载cacti的memcached模板wget h...
      相信很多开发人员接触过memcached,而且我认识的朋友当中有的是经常使用。那么在结合数据库,在对数据库内容做缓存的时候什么情况下使用memcached却不甚了解。有些朋友问到MySQL有自己的Query cache,为什么还要用memcached?
    很多同学可能熟知Memcached的LRU淘汰算法,它是在slab内部进行的,如果所有空间都被slabs分配,即使另外一个slab里面有空位,仍然存在踢数据可能。你可以把slab理解为教室,如果你的教室满了,即使别的教室有空位你的教室也只能踢人才能进人。 本文介绍的却是另外一种现象。今天监控发现线上一memcached发生数据被踢现象,用stats命令看evictions>0,因为以前也出现过此问题,后来对这个参数增加了一个监控,所以这次主动就发...
    在以前写过了\"搭建nginx + python + django +memcached+ mysql +fastcgi 环境\"一文,有不少朋友问我关于memcached的管理的问题,比如查看memcached的运行情况等等,我们知道目前memcached没有直观的工具来查看整个运行情况,不过我们可以通过系统级--shell命令。 1、数据存储(假设key为dbasky.net,value为88888)printf \"set dbasky.net 0 0 5\\r\\n88888\\r\\n\" | nc 127.0.0.1 11211STORED 2、数据取回(假设key为dbask...
    由于32位操作系统下面单进程最大内存使用不能超过2G,而我们用Memcached经常需要使用更大的内存空间,所以选择64位的Linux版本是必须的,64位OS下的Memcached安装和32位OS下差不多,只有一个地方稍有不同,详见下面的红色字体部分。
    在php开发中,开启memcache的数据压缩存储是一件很简单的事情。在多数情况下,压缩数据不仅不会降低程序的执行效率,反倒会因为网络传输的开销降低,带来速度提升。看看最常用的Memcache::set方法: bool Memcache::set ( string $key , mixed $var [, int $flag [, int $expire ]] ) 在这个方法中,将$flag设置为MEMCACHE_COMPRESSED即可启用memcache压缩存储。这样做有什么弊端?
[ 共16篇文章 ][ 第1页/共1页 ][ 1 ]
赞助商广告
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1