Nest.js中使用redis

安装redis

Window 下安装

下载地址:https://github.com/MSOpenTech/redis/releases。

Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压缩包到 C 盘,解压后,将文件夹重新命名为 redis

Nest.js中使用redis_第1张图片

打开文件夹,内容如下:

Nest.js中使用redis_第2张图片

打开一个 cmd 窗口 使用 cd 命令切换目录到 C:\redis 运行:

redis-server.exe redis.windows.conf

如果想方便的话,可以把 redis 的路径加到系统的环境变量里,这样就省得再输路径了,后面的那个 redis.windows.conf 可以省略,如果省略,会启用默认的。输入之后,会显示如下界面:

Nest.js中使用redis_第3张图片

这时候另启一个 cmd 窗口,原来的不要关闭,不然就无法访问服务端了。

切换到 redis 目录下运行:

redis-cli.exe -h 127.0.0.1 -p 6379

这时你就可以通过命令来操作redis了。

Nest.js中使用redis_第4张图片

Nestjs中使用redis

一、Nestjs Redis基本语法

1、Redis 字符串数据类型的相关命令用于管理 redis 字符串值。

基本语法:

 查看所有的key:         keys *

 普通设置:             set key value

 设置并加过期时间:     set key value EX 30           表示30秒后过期

 获取数据:             get key

 删除指定数据:         del key

 删除全部数据:          flushall

 查看类型:             type key

 设置过期时间:          expire key  20              表示指定的key5秒后过期

2、Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

基本语法:

列表右侧增加值:             rpush key value

列表左侧增加值:             lpush key value

右侧删除值:                 rpop key

左侧删除值:                 lpop key

获取数据:                   lrange key

删除指定数据:               del key

删除全部数据:                flushall

查看类型:                   type key

3、Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。它和列表的最主要区别就是没法增加重复值

基本语法:

给集合增数据:               sadd key value

删除集合中的一个值:         srem key value

获取数据:                   smembers key

删除指定数据:               del key

删除全部数据:                flushall

4、Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。

基本语法:

 设置值hmset :               hmset zhangsan name "张三" age 20  sex “男”

 设置值hset :                 hset zhangsan name "张三"

 获取数据:                     hgetall key

 删除指定数据:                 del key

 删除全部数据:                  flushall

5、Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。

发布

client.publish('testPublish', 'message from publish.js');

订阅

client.subscribe('testPublish');

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 1、安装redis

npm install nestjs-redis --save

 

2、用到redis的模块中注册RedisModule

options是一个对象,里面配置了连接redis服务器的信息

import { RedisModule} from 'nestjs-redis'

 @Module({
     imports: [
         RedisModule.register(options)
     ],
 })

 //关于options

 let options={
         port: 6379,
         host: '127.0.0.1',
         password: '',
         db: 0
 }

3、创建一个cache.service.ts 服务 封装操作redis的方法

import { Injectable } from '@nestjs/common';
import { RedisService } from 'nestjs-redis';

@Injectable()
export class CacheService {
   private client: any;
   constructor(private redisService: RedisService) {
       this.getClient();
   }

   private async getClient() {
       this.client = await this.redisService.getClient();
   }


   /**
    * @Description: 封装设置redis缓存的方法
    * @param key {String} key值
    * @param value {String} key的值
    * @param seconds {Number} 过期时间
    * @return: Promise
    */
   public async set(key: string, value: any, seconds?: number): Promise {
       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);
       }
   }


   /**
    * @Description: 设置获取redis缓存中的值
    * @param key {String}
    */
   public async get(key: string): Promise {
       if (!this.client) {
           await this.getClient();
       }

       let data = await this.client.get(key);

       if (data) {
           return JSON.parse(data);
       } else {
           return null;
       }
   }

   /**
    * @Description: 根据key删除redis缓存数据
    * @param key {String}  
    * @return:
    */
   public async del(key: string): Promise {
       if (!this.client) {
           await this.getClient();
       }

       await this.client.del(key);
   }

   /**
    * @Description: 清空redis的缓存
    * @param {type} 
    * @return:
    */
   public async flushall(): Promise {
       if (!this.client) {
           await this.getClient();
       }

       await this.client.flushall();
   }
}

4、调用cache.service.ts 里面封装的方法操作redis数据库

Nest.js中使用redis_第5张图片Nest.js中使用redis_第6张图片

你可能感兴趣的:(Nest.js,redis,node.js)