REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。
Redis 安装好后,默认只能本地登录,如果在测试环境下可以设置bind为 0.0.0.0 开启全部访问,在生产环境部署则修改回127.0.0.1
设置参数如下:
bind //绑定IP(修改绑定IP可能会存在安全隐患) port //绑定端口 默认是6379 maxclients //最大连接数 databases //数据库数量 requirepass //是登录密码,需要设置 maxmemory //最大使用内存
第一步:安装依赖
$ 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 为新值www.haizhuan.tk