rails笔记 cache系统
cache系统 1
cache系统默认只在production下面生效, 要手动生效 修改环境(config/environments) ActionController::Base.perform_caching=true|false
手动cache
- caches_page :xxxaction 直接cache整个页面,相当于html
- caches_action :xxxxaction 只cache action,也就是要执行filter
cache只适合静态内容, 动态变化的内容不适合cache
cache的清除
手动清除,他们接受的参数都和url_for一样,直接按照url来过期
- expire_page
- expire_action
自动清除
通过定一个sweeper类 < ActionController::Caching::Sweeper实现after_create after_update,after_destory三个方法, 传入的参数就是model对象
在controller中生效的方式是cache_sweeper指令
批量清除 pagecache会放在app/public/下面,清除对应的html即可,比如写一个crontab,cache目录和文件名的控制如下 ActionController::Base.page_cache_directory = "dir/name" ActionController::Base.page_cache_extension = ".html"
rails的忠告, 为了避免新出现的google web accelarator这样的工具破坏web, 所有风险大的操作都应该隐藏在POST协议中, 不要直接用get,不然一旦被客户端(和真实用户在一个session中)抓住, url就不保险了
cache系统 2
通过 <%cache do%> ... <%end%>
来实现部分cache
通过expire_fragment(:action=>'xxx')来清除对应cache
如果一个页面里面有多个part 可以使用 cache(:part=>"yyy") 在清除的时候加入:part=>"yyy"就可以了
cache(:controller=>..:action=>...)参数和url_for类似
cache的存储方式有4种可选
- ActionController::Caching::Fragments::MemoryStore.new 直接内存(not a good idea when data is large)
- ActionController::Caching::Fragments::FileStore.new(path) 直接文件
- ActionController::Caching::Fragments::DRbStore.new(url) drbserver
- ActionController::Caching::Fragments::MemCachedStore.new(host) 使用memcached server