使用memcached进行内存缓存.docx

  1. 1、本文档共54页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
使用 memcached 进行内存缓存 通常的网页缓存方式有动态缓存和静态缓存等几种,在 ASP.NET 中已经可以实现对页面局部进行缓 存,而使用 memcached 的缓存比 ASP.NET 的局部缓存更加灵活,可以缓存任意的对象,不管是否在页面上输出。而 memcached 最大的优点是可以分布式的部署,这对于大规模应用来说也是必不可少的要求。LiveJ 使用了 memcached 在前端进行缓存,取得了良好的效果,而像wikipedia,sourceforge 等也采用了或即将采用 memcached 作为缓存工具。memcached 可以大规模网站应用发挥巨大的作用。 Memcached 是什么? Memcached 是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。 Memcached 由Danga Interactive 开发,用于提升LiveJ 访问速度的。LJ 每秒动态页面访问量几千次,用户 700 万。Memcached 将数据库负载大幅度降低,更好的分配资源,更快速访问。 如何使用 memcached-Server 端? 在服务端运行: # ./memcached -d -m 2048 -l 0 -p 11211 这将会启动一个占用 2G 内存的进程,并打开 11211 端口用于接收请求。由于 32 位系统只能处理 4G 内存的寻址,所以在大于 4G 内存使用 PAE 的 32 位服务器上可以运行 2-3 个进程,并在不同端口进行监听。 如何使用 memcached-Client 端? 在应用端包含一个用于描述 Client 的 Class 后,就可以直接使用,非常简单。PHP Example: $options[servers] = array(1:11211, 2:11212); $options[debug] = false; $memc = new MemCachedClient($options); $myarr = array(one,two, 3); $memc-set(key_one, $myarr); $val = $memc-get(key_one); print $val[0].\n; // prints one‘ print $val[1].\n; // prints two‘ print $val[2].\n; // prints 3 为什么不使用数据库做这些? 暂且不考虑使用什么样的数据库(MS-SQL, Oracle, Postgres, MysQL-InnoDB, etc..), 实 现 事 务 (ACID,Atomicity, Consistency, Isolation, and Durability )需要大量开销,特别当使用到硬盘的时候,这就意味着查询可能会阻塞。当使用不包含事务的数据库(例如 Mysql-MyISAM),上面的开销不存在, 但 读线程又可能会被写线程阻塞。 Memcached 从不阻塞,速度非常快。 为什么不使用共享内存? 最初的缓存做法是在线程内对对象进行缓存,但这样进程间就无法共享缓存,命中率非常低,导致缓存效率极低。后来出现了共享内存的缓存,多个进程或者线程共享同一块缓存,但毕竟还是只能局限在一台机器上,多台机器做相同的缓存同样是一种资源的浪费,而且命中率也比较低。 Memcached Server 和 Clients 共同工作,实现跨服务器分布式的全局的缓存。并且可以与 Web Server 共同工作,Web Server 对 CPU 要求高,对内存要求低, Memcached Server 对 CPU 要求低,对内存要求高,所以可以搭配使用。 Mysql 4.x 的缓存怎么样? Mysql 查询缓存不是很理想,因为以下几点: 当指定的表发生更新后,查询缓存会被清空。在一个大负载的系统上这样的事情发生的非常频繁,导致查询缓存效率非常低,有的情况下甚至还不如不开,因为它对 cache 的管理还是会有开销。 在 32 位机器上,Mysql 对内存的操作还是被限制在 4G 以内,但memcached 可以分布开,内存规模理论上不受限制。 Mysql 上的是查询缓存,而不是对象缓存,如果在查询后还需要大量其它操作, 查询缓存就帮不上忙了。 如果要缓存的数据不大,并且查询的不是非常频繁,这样的情况下可以用Mysql 查询缓存,不然的话 memcached 更好。 数据库同步怎么样? 这里的数据库同步是指的类似 Mysql Master-Slave 模式的靠日志同步实现数据库同步的机制。 你可以分布读操作,但无法分布写操作,但写操作的同步需要消耗大量的资源, 而且这个开销是随着 slave 服务器的增长而不断增长的。

文档评论(0)

tianya189 + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档