Web应用缓存系统的分类

作者在 2010-11-06 15:52:36 发布以下内容
目前Web应用的缓存方式多种多样,有APC,File,SQLite,Memcache等等各种类库实现着不同的缓存方式,如果单纯按他们的性能高低对他们进行选择,那将毫无意义,不但不会使你的应用加速,反而有可能给你带来灾难的后果,只有通过了解他们的实现方式,根据具体应用具体选择,才会使缓存系统发挥出最大的性能。

  按照缓存系统存储方式不同,可以将缓存系统分为基于内存的缓存与基于文件的缓存。

  PHP中,APC恐怕是最典型的基于内存的缓存,速度超级快,读写一个简单的32字节的字符串,可以达到1000000次/秒,这样的读写速度几乎可以忽略掉由于引入了额外的缓存系统而带来的性能消耗。

  而对于基于文件的缓存系统来说,ZendFramework有一个基于文件的后端缓存实现(File)比较典型,基于文件的缓存系统具体读写速度没有做过评测,其性能由于受到磁盘IO的限制,所以远远不如内存型缓存速度来的快。

  基于内存、磁盘这两种存储方式的基础上,通过存储不同格式的文件,或者提供不同的访问接口我们就可以实现不同的缓存系统了。例如最近非常流行的Memcache,就是在内存存储的基础上提供Socket的访问方式。再例如MemcacheDB,就是在将存储方式更改为磁盘文件,而访问方式不变。

  按照缓存系统的可访问范围来分,又可以分为进程级缓存,单机缓存,分布式缓存。

  同样的,APC同样是进程级缓存的典型代表,一个PHP FastCGI主进程就会开启一段APC SHM,并且与子进程共享,而多个PHP FastCGI主进程之间的APC SHM相互独立,无法共享,这恐怕也是APC缓存的一大缺陷。

  文件型缓存则是单机缓存的代表,假如我们曾经将PHP的Session存储在文件内,一定会遇到多个Web服务器共享缓存的问题,这正是受文件型缓存访问范围的限制导致的。

  分布式缓存系统则以Memcache为代表,他提供一个基于Socket的访问方式,使得该缓存系统支持远程读写访问。尽管这个缓存的内容可能是存在内存中,也可能是存在文件内。

  其实话说回来,从本质上说,不同的缓存系统就是数据存储方式的不同与数据读写方式的不同,不同的存储方式与不同的读写方式的组合,造就了今天缓存系统百花齐放的场面,只有针对具体应用,判断各个缓存系统优缺点以及局限性,才能选择出最适合自己使用的缓存系统

javaweb | 阅读 946 次
文章评论,共0条
游客请输入验证码
浏览275890次