使用Memcached进行内存缓存

cache|缓存

 

通常的网页缓存方式有动态缓存和静态缓存等几种,在ASP.NET中已经可以实现对页面局部进行缓存,而使用memcached的缓存比ASP.NET的局部缓存更加灵活,可以缓存任意的对象,不管是否在页面上输出。而memcached最大的优点是可以分布式的部署,这对于大规模应用来说也是必不可少的要求。
LiveJournal.com使用了memcached在前端进行缓存,取得了良好的效果,而像wikipedia,sourceforge等也采用了或即将采用memcached作为缓存工具。memcached可以大规模网站应用发挥巨大的作用。

 

Memcached是什么?
Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。
Memcached由Danga Interactive开发,用于提升LiveJournal.com访问速度的。LJ每秒动态页面访问量几千次,用户700万。Memcached将数据库负载大幅度降低,更好的分配资源,更快速访问。

如何使用memcached-Server端?
在服务端运行:
# ./memcached -d -m 2048 -l 10.0.0.40 -p 11211
这将会启动一个占用2G内存的进程,并打开11211端口用于接收请求。由于32位系统只能处理4G内存的寻址,所以在大于4G内存使用PAE的32位服务器上可以运行2-3个进程,并在不同端口进行监听。

如何使用memcached-Client端?
在应用端包含一个用于描述Client的Class后,就可以直接使用,非常简单。
PHP Example:
$options["servers"] = array("192.168.1.41:11211", "192.168.1.42: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服务器的增长而不断增长的。
下一步是要对数据库进行水平切分,从而让不同的数据分布到不同的数据库服务器组上,从而实现分布的读写,这需要在应用中实现根据不同的数据连接不同的数据库。
当这一模式工作后(我们也推荐这样做),更多的数据库导致更多的让人头疼的硬件错误。
Memcached可以有效的降低对数据库的访问,让数据库用主要的精力来做不频繁的写操作,而这是数据库自己控制的,很少会自己阻塞 自己。

Memcached快吗?

非常快,它使用libevent,可以应付任意数量打开的连接(使用epoll,而非poll),使用非阻塞网络IO,分布式散列对象到不同的服务器,查询复杂度是O(1)。

from: http://www.uuzone.com/blog/janes/92031.htm

时间: 2024-08-04 13:09:11

使用Memcached进行内存缓存的相关文章

PHP内存缓存功能memcached示例_php实例

下文简单介绍了memcached类的应用示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下. 一.memcached 简介 在很多场合,我们都会听到 memcached 这个名字,但很多同学只是听过,并没有用过或实际了解过,只知道它是一个很不错的东东.这里简单介绍一下,memcached 是高效.快速的分布式内存对象缓存系统,主要用于加速 WEB 动态应用程序. 二.memcached 安装 首先是下载 memcached 了,目前最新版本是 1.1.12,直接从官方网站即可下载到 memc

[转贴]dbcached──“分布式 key-value 数据库内存缓存系统”

原文:http://blog.s135.com/post/329/ 前言:dbcached 1.0 beta* 在 Memcached 1.2.4 的基础上编写而成,也是我的第一个开源C项目.编写 dbcached 的目的是为了最大限度的发挥 Memcached 内存缓存的优势,便捷地维护 Memcached 服务器节点哈希列表,智能地支持 Memcached 故障转移,同时保证数据的持久化存储. dbcached 协议:New BSD License 作者:张宴 网址:http://code.

php内存缓存实现方法_php技巧

本文实例讲述了php内存缓存实现方法.分享给大家供大家参考.具体如下: 在php中缓存分为很多种类型如,内存缓存,文件缓存,页面缓存.本文要来讲述关于php中内存缓存的一些方法,这里我们将介绍Memcached缓存和php自带的APC缓存方法. 1.Memcached缓存. memcached是高性能的分布式内存缓存服务器,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度,memcached 使用了"Key=>Value"方式组织数据,可以允许不同主机上的多

Memcached分布式内存对象缓存系统简单的使用过程分析

风信网(ithov.com)原创文章:Memcached是一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,进而提升系统性能.Memcached在很多时候都作为数据库的前端cache使用,因为它比数据库少了很多SQL解析.磁盘操作等开销,而且使用内存来管理数据,所以它可以提供比直接读取数据库更好的性能.另外,Memcached也经常作为服务器之间数据共享的存储媒介.学习完本章,相信读者能够对Memcached有一个全面的了解,使构建一套属于自己的分布式内存对象缓存系统变成很简单的事情.

PHP内存缓存Memcached类实例_php技巧

本文实例讲述了PHP内存缓存Memcached类.分享给大家供大家参考. 具体实现方法如下: 复制代码 代码如下: <?PHP class MemcacheModel { private $mc = null; /** * 构造方法,用于添加服务器并创建memcahced对象 */ function __construct(){ $params = func_get_args(); $mc = new Memcache; //如果有多个memcache服务器 if( count($params)

剖析Memcached分布式内存对象缓存系统的工作原理

风信网(ithov.com)原创文章:Memcached是一种C/S模式,在服务器端启动服务守护进程,此时可以指定监听的IP地址.端口号以及使用多少内存来处理客户端的请求等几个关键参数.服务器端的服务启动后就一直处于等待处理客户端的连接状态.Memcached是由C语言来实现的,采用的是异步I/O,其实现方式是基于事件的单进程和单线程的.使用libevent作为事件通知机制,多个服务器端可以http://www.aliyun.com/zixun/aggregation/18521.html"&g

Memcached分布式内存对象缓存系统的性能监控

风信网(ithov.com)原创文章:本文将从三个方面向你介绍Memcached分布式内存对象缓存系统的管理与http://www.aliyun.com/zixun/aggregation/14216.html">性能监控,主要的内容涉如何管理Memcached,如何监控Memcached及随着Memcached应用不断衍生出来的各变种产品的介绍. 如何管理Memcached 1.通过Memcached的监听端口进行管理 Memcached的管理相对比较容易,通过命令行登录到Memcach

wordpress开启Memcached 内存缓存加速网站

方法一,利用linux Memcached开启 测试环境:阿里云 CentOS 5.4 32位,军哥的 LNMP一键安装包配置的环境 1.0. 安装 Memcached lnmp1.0 :进入lnmp解压后的目录,执行:./memcached.sh (这是军哥lnmp内置的安装脚本,其他自己配置的环境,自己google安装方法吧), 回车确认后就会自动安装memcache php扩展和memcached. 安装完以后,就可以正常启用了. WordPress 开启 Memcached 缓存 下载

php MemCache内存缓存学习笔记

一.Memcache简介 Memcache(内存,缓存) :是一个高性能的分布式的内存对象缓存系统.通过在内存里维护一个巨大的HashTable.由Memcached来管理这个巨大的HashTable. 二.Memcache 与 Memcached的区别 Memcache是软件名称,Memcached是启动后的进程名称. 三.Memcache工作原理 memcached是以守护程序方式运行于一个或多个服务器中,随时会接收客户端的连接和操作. 在没有安装memcache的时候网站工作的原理是:浏览