51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

Egg使用egg-redis

# Redis简介 {#redis简介}

REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。

Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。

Redis 通常被称为数据结构服务器,因为值(value)可以是 字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets) 等类型。

# egg-redis {#egg-redis}

github:egg-redis (opens new window)

Egg框架下基于 ioredis 的Redis客户端(支持Redis Portocal),如果你想了解更多用法,可以参考 ioredis (opens new window)的文档。

# 安装 {#安装}

npm i egg-redis --save

或者使用 yarn 进行安装

yarn add egg-redis --save

# 启用redis插件: {#启用redis插件}

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

# 配置 {#配置}

config/config.${env}.js 配置各个环境的redis连接信息

# 单数据源 {#单数据源}

config.redis = {
  client: {
    port: 6379,          // Redis port
    host: '127.0.0.1',   // Redis host
    password: 'auth',
    db: 0,
  },
}

# 多数据源 {#多数据源}

config.redis = {
  clients: {
    foo: {                 // instanceName. See below
      port: 6379,          // Redis port
      host: '127.0.0.1',   // Redis host
      password: 'auth',
      db: 0,
    },
    bar: {
      port: 6379,
      host: '127.0.0.1',
      password: 'auth',
      db: 1,
    },
  }
}

# 使用 {#使用}

# 单数据源 {#单数据源-2}

可以在 controller 中使用 app.redis 获取redis实例,查看ioredis (opens new window)更多用法。

// app/controller/home.js

module.exports = app => {
  return class HomeController extends app.Controller {
    async index() {
      const { ctx, app } = this;
      // set
      await app.redis.set('foo', 'bar');
      // get
      ctx.body = await app.redis.get('foo');
    }
  };
};

# 多数据源 {#多数据源-2}

如果配置了多个redis,可以通过 app.redis.get(instanceName) 来获取redis实例,具体用法:

// app/controller/home.js

module.exports = app => {
  return class HomeController extends app.Controller {
    async index() {
      const { ctx, app } = this;
      // set
      await app.redis.get('instance1').set('foo', 'bar');
      // get
      ctx.body = await app.redis.get('instance1').get('foo');
    }
  };
};

# 常用操作 {#常用操作}

// get
const foo = await app.redis.get(key)

// set
await app.redis.set(key, value)
// set同时设置有效期,单位:秒
await app.redis.set(key, value, 'EX', seconds)
// 设置有效期
await app.redis.expire(key, seconds)

// 删除
await app.redis.del(key)

// 删除所有 !!!慎用
await app.redis.flushall()
赞(4)
未经允许不得转载:工具盒子 » Egg使用egg-redis