• 1
  • 2
  • 3
  • 4
  • 5
mssql数据库问题 首 页  »  帮助中心  »  数据库  »  mssql数据库问题
Node.js 下如何利用redis快速实现函数cache化
发布日期:2016-4-18 22:4:9

  Node.js 下如何利用redis快速实现函数cache化

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

  这个小工具的实现是我借鉴了underscore. memoize 的思路,对需要cache的函数不需要改写函数内部本身的实现,不像mssql,只需要把函数传递给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,否则可能带来灾难性后果。

以后会更新一些mssql的问题,关注mssql的敬请期待。