利用redis快速实现函数cache化
发布在open-node 开源推荐2015年4月19日view:1789YiksiAssow
在文章任何区域双击击即可给文章添加【评注】!浮到评注点上可以查看详情。

open-cache [https://github.com/open-node/open-cache] 一个基于redis 的cache的函数库。

这个小工具的实现,我借鉴了underscore. memoize 的思路,对需要cache的函数不改写函数内部本身的实现,只需要把函数传递给open-cache,让它根据特定的条件来把函数加工成支持cache的函数

open-cache 库包被引入以后会提供一下几个方法

var cache = require(‘./open-cache’);

初始化cache, 端口,ip,options 是可选附件值,目前支持namespace, 避免多应用使用同一个redis-server冲突

使用前一定要先init,否则会报错

cache.init(port, host, options)

获取cache的值,根据key,done接受的参数第一个是error,第二个是cache的值

cache.get(key, done)

设置cache值, 这个格式不用我说大家也知道是什么含义了吧,唯一需要注意的是life的单位是秒

cache.set(key, value, life, done)

删除某个cache值

cache.del(key, done)

以上这些方法可以说都平淡无奇,因为几乎每一个做类型的库都会提供这些。这些只是最基础的东西,其实我不推荐大家直接使用上面这(get,set,del)三个函数,

因为如果你直接使用这三个以为着对你目前系统的改造工作比较大,我推荐大家使用下面这个

cache(keyTpl, func, life, bind)

cache本身就是一个函数,他的作用就是帮你把你需要做cache的函数给加工好。至于怎么加工的你完全可以不去关心。他只需要问你几个问题,你回答就好了。

keyTpl, 一个字符串,里面可以包含{0},{1},…{n} 这样的东西,这样的东西会被函数调用是的参数替换,这样就能避免同一函数不同参数调用cache的冲突

func,这个就是你要加工的函数,这个函数必须要满足以下几个条件,这其实也是node.js里异步函数大家习以为常的写法

func 的参数最后一个一定要是callback,callback接收的参数第一个必须是error,第二个参数是结果。

life, 你希望这个函数的结果cache多久实效,单位是秒

bind, 一个可选参数,你希望你的 func 在执行的之后指定的内部 this

ok,之后cache函数会把加工好的函数返回给你。返回给你的这个函数自动有了cache的能力。用法依然保持了你一开始实现的用法。

大家可以直接去github clone这个库,看一下 test/index.coffee 里的用法就彻底明白了。

git clone https://github.com/open-node/open-cache
  • 注,cache一般只用于读取,写操作千万别cache,否则可能带来灾难性后果。
评论
发表评论
暂无评论
WRITTEN BY
redstone
时刻保持高昂的斗志
TA的新浪微博
PUBLISHED IN
open-node 开源推荐

详细介绍open-node 陆续推出的一系列开源库包

我的收藏