使用Hubot连接到Redis而不使用brain

目标

    • hubotからredisに格納されたデータを利用したい

 

    hubotには永続化層としてhubot brainが用意されていて、redisを利用できるが、hubot brainではキー名に制限があるのでこれを使わずに実現したい

例子

在hubot的package.json中的dependencies中添加redis。

  (省略)
  "dependencies": {
    "hubot":         ">= 2.6.0 < 3.0.0",
    "hubot-scripts": ">= 2.5.0 < 3.0.0",
    "hubot-slack": ">= 2.2",
    "redis": "0.8.4"
  },
  (省略)
# Description:
#   Redis Test
#
# Dependencies:
#   "redis": "0.8.4"
#
# Commands:
#   hubot redis-get message
#   hubot redis-get message "Hello, World!!"
#
# Authors:
#   metheglin

Redis = require "redis"

module.exports = (robot) ->

  robot.respond /redis-get (.*)$/i, (msg) ->
    redis_key = msg.match[1].trim()
    client = Redis.createClient()
    client.get "#{redis_key}", (err, reply) ->
      if err
        throw err
      else if reply
        result = JSON.parse( reply )
        msg.send result
      else
        msg.send "key: #{redis_key}は見つかりません."

  robot.respond /redis-set ([^\s]*) (.*)$/i, (msg) ->
    redis_key = msg.match[1].trim()
    redis_val = msg.match[2].trim()
    client = Redis.createClient()
    client.set "#{redis_key}", "#{redis_val}", (err, keys_replies) ->
      if err
        throw err

稍微注意的一点是,如果想要将 Redis 数据的获取结果返回给 Hubot 流,就需要等待获取结果。
因为 Redis 的 `client.get` 是异步的,所以必须在回调函数内部使用 `msg.send`。

■执行结果

Hubot> hubot redis-get "message"
Hubot> key: "message"は見つかりません.
Hubot> hubot redis-get message
Hubot> key: messageは見つかりません.
Hubot> hubot redis-set message "Hello, World!!"
Hubot> hubot redis-get message
Hubot> Hello, World!!

参考资料

    https://github.com/mranney/node_redis
广告
将在 10 秒后关闭
bannerAds