docs: function(opts, callback) {
    if (callback === undefined) {
      throw new Error('callback undefined in $fh.cache. See documentation of $fh.cache for proper usage');
    }
  
    if (opts.act === undefined) {
      return callback('No cache actions defined!');
    }
  
    var fullKey = appname + opts.key;
  
    var client = redisClient();
    if (opts.act === 'save') {
      client.on("connect", function() {
        if (redisPassword) {
          client.auth(redisPassword, function(err) {
            if (err) {
              callback(err);
            }
          });
        }
      });
      client.on("error", function(err) {
        console.error("fh.cache error: %s ", err);
        return callback(err);
      });
      client.on("ready", function(err) {
        if (err) {
          return callback(err);
        }
        if (opts.expire !== undefined) {
          client.setex(fullKey, opts.expire, opts.value, function(err, reply) {
            client.quit();
            return callback(err, reply);
          });
        } else {
          client.set(fullKey, opts.value, function(err, reply) {
            client.quit();
            return callback(err, reply);
          });
        }
      });
    } else if (opts.act === 'load') {
      client.on("connect", function() {
        if (redisPassword) {
          client.auth(redisPassword, function(err) {
            if (err) {
              callback(err);
            }
          });
        }
      });
      client.on("error", function(err) {
        console.error("fh.cache error: %s", err);
        callback(err);
        client.end();
      });
      client.on("ready", function(err) {
        if (err) {
          return callback(err);
        }
        client.get(fullKey, function(err, reply) {
          client.quit();
          return callback(err, reply);
        });
      });
    } else if (opts.act === 'remove') {
      client.on("connect", function() {
        if (redisPassword) {
          client.auth(redisPassword, function(err) {
            if (err) {
              callback(err);
            }
          });
        }
      });
      client.on("error", function(err) {
        console.error("fh.cache error: %s", err);
        return callback(err);
      });
      client.on("ready", function(err) {
        if (err) {
          return callback(err);
        }
        client.del(fullKey, function(err, reply) {
          client.quit();
          return callback(err, reply);
        });
      });
    } else {
      return callback("Unknown cache action: " + opts.act);
    }
  }