web缓存
12 November 2014
前言
缓存是提高web性能的不二选择。web作为一个分布式的系统,可以添加缓存的地方存在很多,比如:客户端浏览器缓存,缓存服务器,代理缓存,页面缓存,片段缓存,动作缓存,数据层缓存。每个层次的缓存涉及的技术都可以进一步展开。具体操作上,就是客户端js的处理,服务器端Rails的处理,以及数据库端的mysql和mongodb,以上是我目前的理解。
原则上,GET请求是幂等的,因而是可缓存的,但是,如果是动态页面,如果做缓存,又需要做何种处理。
暂且,web缓存是想通过Rails自带的缓存以及Rack提供的缓存的方式,关于缓存的相关知识具体就要参考手头上的《HTTP权威指南》
数据库服务器端,想来参考Robbin的两篇关于ORM的文章:
具体的如何操作,可以参考robin_site
应用场景
需要缓存的地方:
- 静态页面
- 无变化的动态页面
- 动态页面片段
- 应用程序数据
memcached
分布式操作,不需要考虑ACID,使用缓存。
Rails对缓存的支持很大,memcached可以用在如下的几个方面:
- ActionController::Caching::Fragments
- CGI::Session::MemCacheStore
- cached_model for caching ActiveRecord objects
Rails中的memcached的配置:
require 'memcache'
memcache_options = {
:compression => false,
:debug => false,
:namespace => "app-#{RAILS_ENV}",
:readonly => false,
:urlencode => false
}
memcache_servers = [ '192.168.1.150:2222', '192.168.1.150:2223' ]
Rails::Initializer.run do |config|
....
config.action_controller.session_store = :mem_cache_store
...
config.action_controller.fragment_cache_store = :mem_cache_store, memcache_servers, memcache_options
...
end
cache_params = *([memcache_servers, memcache_options].flatten)
CACHE = MemCache.new *cache_params
ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS.merge!({ 'cache' => CACHE })
具体而言,诸如使用了Rails.cache
等方法的,缓存存放在memcache中。
Ruby可通过Memcached的client来使用memcache,常见的memcache客户端有:
- memcache-client
- dalli
仔细想了想,cache的部分,比之前理解的更深了,却没有好好用,光说不练假把式。
redis
redis更多是是作为数据结构缓存服务器来使用,其性能和缓存的能力都非常的强大。所以,经常用来处理更多的事情。
参考文献
傲娇的使用Disqus