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()

赞(5)
未经允许不得转载:工具盒子 » Egg使用egg-redis