q不知道q个Q那你去面试的时候要吃亏?jin),赶紧d方网站看一?a target="_blank" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; text-decoration: none; color: #006666; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; ">http://www.danga.com/memcached/Q另外google一下用法,盘L太慢Q把数据存在内存里面吧,如果你只有一台服务器Q推荐用一?a target="_blank" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; text-decoration: none; color: #006666; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; ">APC(Facebook在用)或?a target="_blank" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; text-decoration: none; color: #006666; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; ">eaccelerator或?a target="_blank" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; text-decoration: none; color: #006666; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; ">Xcache(国h开发的)Q这些品单机效果更好,如果你需要分布式的缓存方案,那么用memcached吧?/p>
我们都知道mysql有个query cacheQ可以缓存上ơ查询的l果Q可实际上帮不上太多的忙Q下面是mysql quety cache的不I(x)
« 只能有一个实?
意味着你能存储内容的上限就是你服务器的可用内存Q一台服务器能有多少内存Q你又能存多呢Q?br />
« 只要有写操作Qmysql的query cache失?br />
« 只要数据库内容稍有改变,那怕改变的是其他行Qmysql的query cache也会(x)失效
« mysql的query cache只能~存数据库数据行
意味着其他内容都不行,比如数组Q比如对象,而memcached理论上可以缓存Q何内容,甚至文g^_^
四、Fotolog的缓存技?br />
非确定性缓存你不确定你要的数据~存中有没有Q你也不知道是不是过期了(jin)Q于是你p探性的问memcachedQ我要的什么什么数据你那有吗?我可不要q期的数据啊Qmemcached告诉你说有ƈ且给 你,你就开?j)?jin)Q如果没有呢Q你p从数据库或者别的地方去获取?jin),q是memcached典型的应用?br />
主要应用在:(x)
1.复杂的数据需要多ơ读取,你的数据库做?jin)分片处理,从多个数据库中获取数据ƈl合h是一个非常大的开销Q你大可以把q些数据取出来之后存到memcached?/p>
2.mysql query cache的一个好的替代方案,q样数据库其他部门改变了(jin)Q只要自己没改变没问题Q注意数据库更新的问题,后面?x)提刎ͼ?j)
3.把关pL者列表缓存v来,比如某个栏目下的多篇文章列表
4.被多个页面调用ƈ且获取v来很慢的数据Q或者是更新很慢的数据,比如文章览排行?/p>
5.如果cache的开销过重新获取的开销Q那么不要缓存它?/p>
6.标签云和自动(cMgoogle sugest)
例如Q当一个用户上传一个图片,q个用户的好友页面上都要列出q张囄来,那么把它~存h吧?/p>
潜在问题Q?br /> memcached消耗的主要是服务器内存Q对CPU消耗很,所以Fotolog把memcached部v在他们的应用服务器上Q貌似我们也是这P(j)Q他们遇C(jin)CPU搞到90Q的使用率(怎么?x)那么高Q哪出问题了(jin) 吧)(j)、内存回Ӟq是个大问题Q等{问题?br /> 状态缓存把应用服务的当前状态存在memcached中主要应用在Q?br /> 1.“昂贵”的操作,开销大的操作
2.sessions?x)话QFlickr把session存在数据库中Q个人感觉还是存memcached比较“便宜”些,如果memecached服务器down掉了(jin)Q那么重新登录吧?/p>
3.记录用户在线信息(我们也是q样做的)
1.d伸展Q所有的d都从memcached中获得,数据库没有负?/p>
2.”怸q期“(相对?的数据,比如行政规划数据Q变动很吧
3.l常调用的内?/p>
4.用户的认证信?/p>
5.用户的概要信?/p>
6.用户的参数设|?/p>
7.用户当前常用的媒体文件列表,比如用户的图?/p>
8.用户dQ不走数据库Q只走memcachedQ个得这个不太好Q登录信息还是需要持久化的,用类似BDBq样效果也不错)(j)
使用方式Q?/strong>
1.多个专门的缓存池而不是一个大的缓存服务器Q多个缓存池保障?jin)高可用性,一个缓存实例挂掉了(jin)走其他的~存实例Q所有的~存实例挂掉?jin),走数据库Q估计数据库抗不住^_^Q?/p>
2.所有的~存池都用程序来l护Q比如数据库有更新时Q程序自动把更新后的内容同步到多个缓存实例中
3.服务器重启之后,~存要比|站先启动,q就意味着当网站已l启动了(jin)Q所有的~存都可?/p>
4.d的请求可以负载均衡到多个~存实例中去Q高性能Q高可靠?/p>
潜在的问题:(x)
1.你需要够多的内存来存储那么多的数据
2.数据以行记录数据Q而memcached以对象来存储数据Q你的逻辑要把行列的数据{换成~存对象
3.要维护多个缓存实例非帔R?Fotolog用Java/HibernateQ他们自己写?jin)个客户端来轮?/p>
4.理多个~存实例?x)增加应用程序的许多开销Q但q些开销相对于多个缓存得到的好处来说不?jin)什?/p>
2.执行用户自定义函敎ͼ讄触发器调用UDF更新Q具体参?a title="http://tangent.org/586/Memcached_Functions_for_MySQL.html" target="_blank" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; text-decoration: none; color: #006666; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; ">http://tangent.org/586/Memcached_Functions_for_MySQL.html
3.使用BLACKHOLE{略Q传说中Facebook也用mysql的Blackhole存储引擎来填充缓存,写到Blackhole的数据复制到~存中,Facebook用这来设|数据作废以?qing)跨国界的复Ӟ好处是数据库的复制不走mysqlQ这意味着没有二进制日志以?qing)对CPU使用不那么多Q啊Q难道通过memcached存储二进制日志,然后复制C同的数据库?有经验的同志在这个话题上可以补充。)(j)
« 文gpȝ~存把文件直接缓存在memcached中,哇,够BT的,减轻NFS的负担,估计只缓存那些过于热门的囄吧?/p>
1.多节点以应对”单点故障”
2.使用热备技术,当某个节点down掉了(jin)Q另外一台服务自动替换成它的IPQ这样客L(fng)不用更新memcached的IP地址
3.memcached可以通过TCP/UDP讉KQ持l连接可以减轻负载,pȝ设计成可同时承受1000个连?/p>
4.不同的应用服务,不同的缓存服务器?.(g)查一下你的数据大是否匹配你分配的缓存,更多请参?a target="_blank" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; text-decoration: none; color: #006666; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; ">http://download.tangent.org/talks/Memcached%20Study.pdf
6.不要考虑数据行缓存,~存复杂的对?/p>
7.不要在你的数据库服务器上跑memcachedQ两个都是吃内存的怪兽
8.不要被TCP延迟困扰Q本地的TCP/IP对内存复制是做了(jin)优化?/p>
9.可能的q行处理数据
10.q不是所有的memcached的客L(fng)都是一L(fng)Q仔l研I你用的语言所对应的(好像php和memcached配合的不错)(j)
11.可能的是数据过期而不是数据无效Qmemcached可以讑֮q期旉
12.选择一个好的缓存标识keyQ比如更新的时候加上版本号
13.把版本号存储在memcached?/p>
作者最后的感言我就不翻译了(jin)Q貌似mysql proxy正在做一个项目,自动同步mysql以及(qing)memcachedQ更多参?a target="_blank" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; text-decoration: none; color: #006666; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; ">http://jan.kneschke.de/2008/5/18/mysql-proxy-replicating-into-memcache
后记Q前几天Q把Flickr架构(一)q篇文章发在PHPChina那的原创板块Q居然被理员当成Y文给删掉?jin),N因为我保留?jin)版权信息?匪夷所思?/p>