nest Redis 数据库

时间:2023-01-18 浏览:185 分类:NestJS

REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。

Redis 配置常识

Redis 安装好后,默认只能本地登录,如果在测试环境下可以设置bind为 0.0.0.0 开启全部访问,在生产环境部署则修改回127.0.0.1

设置参数如下:

bind  //绑定IP(修改绑定IP可能会存在安全隐患)
port  //绑定端口 默认是6379
maxclients   //最大连接数
databases    //数据库数量 
requirepass  //是登录密码,需要设置
maxmemory    //最大使用内存

nest 使用Redis

第一步:安装依赖

$ npm i @liaoliaots/nestjs-redis ioredis

第二步:加载模块

// app.module.ts

import {RedisModule} from '@liaoliaots/nestjs-redis';

@Module({
    imports: [
        RedisModule.forRoot({
            config: {
                host: '10.211.55.8',
                port: 6379,
                password: '12345678',
            }
        })
    ],
    controllers: [AppController],
})
export class AppModule {}

或者也可以使用异步加载

// app.module.ts

import {RedisModule} from '@liaoliaots/nestjs-redis';
import { ConfigService, ConfigModule } from '@nestjs/config';

@Module({
    imports: [
        RedisModule.forRootAsync({
            imports: [ConfigModule],
            inject: [ConfigService],
            useFactory: async (configService: ConfigService) => {
                // 一些异步逻辑
                return {
                    config: {
                        host: '10.211.55.8',
                        port: 6379,
                        password: '12345678',
                        //Function to be executed as soon as the client is created
                        onClientCreated: (client) => {        
                            client.on('connect', () => {
                                console.log('redis connect');
                            });
                            client.on('error', (err) => {
                                console.log('redis error', err);
                            });
                        }
                    }
                };
            }
        })
    ],
    controllers: [AppController],
})
export class AppModule {}

第三步:服务中注入

import { Injectable } from '@nestjs/common';
import { RedisService, DEFAULT_REDIS_NAMESPACE } from '@liaoliaots/nestjs-redis';
import Redis from 'ioredis';

@Injectable()
export class AppService {
  private readonly redis: Redis;

  constructor(private readonly redisService: RedisService) {
    this.redis = this.redisService.getClient();
    // or
    // this.redis = this.redisService.getClient(DEFAULT_REDIS_NAMESPACE);
  }

  async set() {
    return await this.redis.set('key', 'value', 'EX', 10);
  }
}

第四步:数据添加、修改与删除

//添加新数据
redis.set('key', 'value',Options?, callback?);
// 如果option为空,则创建永久数据
// options: "EX" 数据存储过期时间,单位秒s
//          “PX” 数据存储过期时间,单位秒ms
// callback: 数据操作后的回调

例子:

redis.set('name', 'zhangsan','EX', 30);  // 将键值对 name:zhangsan 存入30秒后删除
// 获取数据
const res = redis.get('key', callback?)
// 如果数据库中没找到,则返回 null (res === null) => true;
// 修改数据
redis.set('key', 'value');   // value 为新值