扎奇:一个简单的 Ruby 内存缓存

一个月前遇到问题,找不到能在内存中缓存且可定时过期的 Ruby 宝石,经过研究决定自己实现并命名为 Zache(意为“零缓存”,无后端)。工作原理如下:

  • 首先创建缓存:require 'zache'; zache = Zache.new
  • 然后通过键获取值,同时提供如果键不存在或已过期将执行的代码块:x = zache.get(:x, lifetime: 15) do # Something very slow and expensive... end,这里:x是键,15是在缓存中保留的秒数直到过期。
  • 需注意键不会自动从缓存中删除,会一直保留到下次调用get(:x),此时才会被标记为“过期”。要清理缓存可调用zache.clean(),所有过期的键将被删除,可在单独线程中定期执行,如每分钟:Thread.start do sleep 60; zache.clean end
  • Zache 当然是线程安全的。该宝石在GitHub 仓库,如有问题可报告或提供额外功能帮助。
阅读 38
0 条评论