- 创建项目
- Nest 控制器
- nest 配置路由请求数据
- Nest 服务
- Nest 模块
- 配置静态资源
- 配置模板引擎
- Cookie 的使用
- Session 的使用
- 跨域,前缀路径、网站安全、请求限速
- 管道、守卫、拦截器、过滤器、中间件
- 一例看懂中间件、守卫、管道、异常过滤器、拦截器
- 数据验证
- 配置抽离
- 环境配置
- 文件上传与下载
- 实现图片随机验证码
- 邮件服务
- nest 基于 possport + jwt 做登陆验证
- 对数据库的密码加密:md5 和 bcryptjs
- 角色权限
- 定时任务
- 接入 Swagger 接口文档
- nest 连接 Mongodb
- typeORM 操作 Mysql 数据库
- nest 统一处理数据库操作的查询结果
- 数据库实体设计与操作
- typeorm 增删改查操作
- typeorm 使用事务的 3 种方式
- typeorm 一对一关系设计与增删改查
- typeorm 一对多和多对一关系设计与增删改查
- typeorm 多对多关系设计与增删改查
- nest 连接 Redis
- 集成 redis 实现单点登录
- Q:nestJS 注入其他依赖时为什么还需要导入其 module
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
nest 连接 Redis
Redis 字符串数据类型的相关命令用于管理 redis 字符串值
- 查看所有的 key:
keys *
- 普通设置:
set key value
- 设置并加过期时间:
set key value EX 30
表示 30 秒后过期 - 获取数据:
get key
- 删除指定数据:
del key
- 删除全部数据:
flushall
- 查看类型:
type key
- 设置过期时间:
expire key 20
表示指定的key5
秒后过期
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
- 列表右侧增加值:
rpush key value
- 列表左侧增加值:
lpush key value
- 右侧删除值:
rpop key
- 左侧删除值:
lpop key
- 获取数据:
lrange key
- 删除指定数据:
del key
- 删除全部数据:
flushall
- 查看类型:
type key
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。它和列表的最主要区别就是没法增加重复值
- 给集合增数据:
sadd key value
- 删除集合中的一个值:
srem key value
- 获取数据:
smembers key
- 删除指定数据:
del key
- 删除全部数据:
flushall
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
- 设置值 hmset :
hmset zhangsan name "张三" age 20 sex “男”
- 设置值 hset :
hset zhangsan name "张三"
- 获取数据:
hgetall key
- 删除指定数据:
del key
- 删除全部数据:
flushall
Redis 发布订阅(pub/sub) 是一种消息通信模式:发送者(pub) 发送消息,订阅者(sub) 接收消息
// 发布 client.publish('publish', 'message from publish.js'); // 订阅 client.subscribe('publish'); client.on('message', function(channel, msg){ console.log('client.on message, channel:', channel, ' message:', msg); });
Nestjs 中使用 redis
Nestjs Redis 官方文档: https://github.com/kyknow/nestjs-redis
npm install nestjs-redis --save
如果是 nest8 需要注意该问题: https://github.com/skunight/nestjs-redis/issues/82
// app.modules.ts import { RedisModule } from 'nestjs-redis'; import { RedisTestModule } from '../examples/redis-test/redis-test.module'; @Module({ imports: [ // 加载配置文件目录 ConfigModule.load(resolve(__dirname, 'config', '**/!(*.d).{ts,js}')), // redis 连接 RedisModule.forRootAsync({ useFactory: (configService: ConfigService) => configService.get('redis'), inject: [ConfigService], }), RedisTestModule, ], controllers: [], providers: [ ], }) export class AppModule implements NestModule {}
// src/config/redis.ts 配置 export default { host: '127.0.0.1', port: 6379, db: 0, password: '', keyPrefix: '', onClientReady: (client) => { client.on('error', (err) => { console.log('-----redis error-----', err); }); }, };
创建一个 cache.service.ts 服务 封装操作 redis 的方法
// src/common/cache.service.ts import { Injectable } from '@nestjs/common'; import { RedisService } from 'nestjs-redis'; @Injectable() export class CacheService { public client; constructor(private redisService: RedisService) { this.getClient(); } async getClient() { this.client = await this.redisService.getClient(); } //设置值的方法 async set(key: string, value: any, seconds?: number) { value = JSON.stringify(value); if (!this.client) { await this.getClient(); } if (!seconds) { await this.client.set(key, value); } else { await this.client.set(key, value, 'EX', seconds); } } //获取值的方法 async get(key: string) { if (!this.client) { await this.getClient(); } const data = await this.client.get(key); if (!data) return; return JSON.parse(data); } // 根据 key 删除 redis 缓存数据 async del(key: string): Promise<any> { if (!this.client) { await this.getClient(); } await this.client.del(key); } // 清空 redis 的缓存 async flushall(): Promise<any> { if (!this.client) { await this.getClient(); } await this.client.flushall(); } }
使用 redis 服务
redis-test.controller
import { Body, Controller, Get, Post, Query } from '@nestjs/common'; import { CacheService } from 'src/common/cache/redis.service'; @Controller('redis-test') export class RedisTestController { // 注入 redis 服务 constructor(private readonly cacheService: CacheService) {} @Get('get') async get(@Query() query) { return await this.cacheService.get(query.key); } @Post('set') async set(@Body() body) { const { key, ...params } = body as any; return await this.cacheService.set(key, params); } @Get('del') async del(@Query() query) { return await this.cacheService.del(query.key); } @Get('delAll') async delAll() { return await this.cacheService.flushall(); } }
redis-test.module.ts
import { Module } from '@nestjs/common'; import { RedisTestService } from './redis-test.service'; import { RedisTestController } from './redis-test.controller'; import { CacheService } from 'src/common/cache/redis.service'; @Module({ controllers: [RedisTestController], providers: [RedisTestService, CacheService], // 注入 redis 服务 }) export class RedisTestModule {}
redis-test.service.ts
import { Injectable } from '@nestjs/common'; @Injectable() export class RedisTestService {}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论