一个月前遇到问题,找不到能在内存中缓存且可定时过期的 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 仓库,如有问题可报告或提供额外功能帮助。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。