Skip to content
关注公众号,获取新课通知

redis 缓存插件和封装


安装

shell
npm i egg-redis --save

配置

js
// config/plugin.js
exports.redis = {
  enable: true,
  package: "egg-redis",
};

// redis存储
config.redis = {
  client: {
    port: 6379, // Redis port
    host: "127.0.0.1", // Redis host
    password: "",
    db: 2,
  },
};

缓存库封装

js
// app/service/cache.js
"use strict";

const Service = require("egg").Service;

class CacheService extends Service {
  /**
   * 获取列表
   * @param {string} key
   * @param {boolean} isChildObject 元素是否为对象
   * @return { array } 返回数组
   */
  async getList(key, isChildObject = false) {
    const { redis } = this.app;
    let data = await redis.lrange(key, 0, -1);
    if (isChildObject) {
      data = data.map((item) => {
        return JSON.parse(item);
      });
    }
    return data;
  }
  /**
   * 设置列表
   * @param {string} key
   * @param {object|string} value
   * @param {string} type 类型:push和unshift
   * @param {Number} expir 过期时间 单位秒
   * @return { Number } 返回索引
   */
  async setList(key, value, type = "push", expir = 0) {
    const { redis } = this.app;
    if (expir > 0) {
      await redis.expire(key, expir);
    }
    if (typeof value === "object") {
      value = JSON.stringify(value);
    }
    if (type === "push") {
      return await redis.rpush(key, value);
    }
    return await redis.lpush(key, value);
  }

  /**
   * 设置 redis 缓存
   * @param { String } key
   * @param {String | Object | array} value
   * @param { Number } expir 过期时间 单位秒
   * @return { String } 返回成功字符串OK
   */
  async set(key, value, expir = 0) {
    const { redis } = this.app;
    if (expir === 0) {
      return await redis.set(key, JSON.stringify(value));
    } else {
      return await redis.set(key, JSON.stringify(value), "EX", expir);
    }
  }

  /**
   * 获取 redis 缓存
   * @param { String } key
   * @return { String | array | Object } 返回获取的数据
   */
  async get(key) {
    const { redis } = this.app;
    const result = await redis.get(key);
    return JSON.parse(result);
  }

  /**
   * redis 自增
   * @param { String } key
   * @param { Number } value 自增的值
   * @return { Number } 返回递增值
   */
  async incr(key, number = 1) {
    const { redis } = this.app;
    if (number === 1) {
      return await redis.incr(key);
    } else {
      return await redis.incrby(key, number);
    }
  }

  /**
   * 查询长度
   * @param { String } key
   * @return { Number } 返回数据长度
   */
  async strlen(key) {
    const { redis } = this.app;
    return await redis.strlen(key);
  }

  /**
   * 删除指定key
   * @param {String} key
   */
  async remove(key) {
    const { redis } = this.app;
    return await redis.del(key);
  }

  /**
   * 清空缓存
   */
  async clear() {
    return await this.app.redis.flushall();
  }
}

module.exports = CacheService;

缓存库使用

js
// 控制器
await this.service.cache.set("key", "value");