Gem active_model_cachers 轻巧方便的缓存工具

khiav223577 · 2018年05月20日 · 最后由 hfpp2012 回复于 2018年05月21日 · 3364 次阅读

简介:

active_model_cachers 能够让你以简单的方式去设定缓存机制,能够自由设定缓存的目标、以及何时清理缓存。支援 Rails 3, 4, 5。

安装

在 Gemfile 里加上这行:

gem 'active_model_cachers'

加一个 initializer 到你的专案:

ActiveModelCachers.config do |config|
  config.store = Rails.cache # 设定缓存的操作介面
end

使用范例

名字与 lambda 内容都能自由更改

  • something_you_want_to_cache 是缓存的 key
  • ->{ get_the_data_on_cache_miss } 是缓存的资料,lambda 的回传值会存入缓存
  • expire_by: 'User' 设定监控目标,当目标变动时,主动过期缓存
class User < ActiveRecord::Base
  cache_at :something_you_want_to_cache, ->{ get_the_data_on_cache_miss }, expire_by: 'User'
end

user.cacher.something_you_want_to_cache

特性

  • 能缓存任意的 SQL query 结果、以及非资料库的资料,如耗时的函式运算结果、外部请求的回传内容
  • 透过 after_commit 清理过期的缓存,支援 create, update, destroy, 甚至 delete。
  • 智能地取用关联缓存以及已 eager-loading 的资料,减少资料库存取
user = User.includes(:posts).take
user.cacher.posts # => 无缓存时,仍然不会额外存取资料库
  • 支援主动清理缓存
  • 支援直接查询缓存内容
  • 支援缓存关联 (has_one, belongs_to, has_many)
  • 支援缓存属性 (attribute)
  • 支援以不同主键缓存自身
class User < ActiveRecord::Base
  cache_self by: :account
end

@user = User.cacher.find_by(account: 'khiav')

比较

identity_cachesecond_level_cache 不同的是,这二者著重在于缓存 ActiveRecord,对 AR 进行扩展,方便度较高,但弹性也因而降低。而 active_model_cachers 著重于自由设定缓存,不局限于缓存 AR。详细功能差异可参考这里

更完整的介绍

详细功能与使用说明,可以到 github repository 上观看:

https://github.com/khiav223577/active_model_cachers

很赞,感谢推荐

需要 登录 后方可回复, 如果你还没有账号请 注册新账号