Nest.js权限管理系统开发(二)连接MySQL、Redis

安装MySQL及相关依赖

下载dmg文件安装

前往MySQL :: Download MySQL Community Server下载最新版本的MySQL。

打开系统设置,拉到最下方可以看到MySQL,打开看到两个绿点表示安装成功,也可以在这里修改MySQL密码。

配置环境变量

打开终端配置MySQL环境:

vim ~/.bash_profile

按字母 i 键切换至输入状态,添加如下配置:

export PATH=${PATH}:/usr/local/mysql/bin

按ESC键退出输入状态,输入:wq回车即可,然后执行 source ~/.bash_profile 使其配置生效。为确保配置成功,vim ~/.zshrc 按以上步骤操作一遍。

输入mysql --version,出现MySQL版本信息,则表示配置成功。

进入MySQL

终端输入 mysql -u root -p 回车输入数据库密码,出现如下信息说明进入MySQL成功。

安装MySQL可视化工具(可选)

MySQL Workbench 官方地址:https://dev.mysql.com/downloads/workbench/。或者使用一个 VSCode 数据库可视化插件Database Client,安装完后连接我们的数据库就能进行一个可视化操作。先需要使用账号密码连接MySQL,然后创建一个数据库ADMIN,然后可以手动创建表或者选择导入sql文件,也可以通过后面的实体文件自动创建。最终效果如下:

安装相关依赖

安装typeorm及mysql2等相关依赖,typeorm可以将数据库的 sql 操作转化为对象操作:

npm install --save @nestjs/typeorm typeorm mysql2

项目配置

来到app.module.ts中进行数据库的配置,引入TypeOrmModule调用forRoot进行配置。

import { Module } from "@nestjs/common";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";
import { UserModule } from "./user/user.module";
import { TypeOrmModule } from "@nestjs/typeorm";
@Module({imports: [TypeOrmModule.forRoot({type: "mysql",synchronize: true,autoLoadEntities: true, //自动加载实体host: "localhost",port: 3306, // 端口号username: "root", // 用户名password: "root", // 密码database: "admin", //数据库名synchronize: true, //是否自动同步实体文件,生产环境建议关闭}),UserModule,],controllers: [AppController],providers: [AppService],
})
export class AppModule {}

当我们将autoLoadEntities设置为 true 的时候,NestJS 会自动加载数据库实体文件xx.entity.ts文件来创建数据表(如果没有的话),比如 user/entities/user.entity.ts,我们简单加一些字段:

import { Column, Entity, PrimaryGeneratedColumn } from "typeorm";@Entity("user")
export class User {@PrimaryGeneratedColumn("uuid")id: number; // 标记为主键,值自动生成@Column({ length: 30 })username: string; //用户名@Column()password: string; //密码
}

启动项目,然后就会发现自动创建了一个 user 表。

到此为止,mysql和typeorm配置相关内容就完成了。下面进入Redis的编译和使用。

Redis使用

下载Redis源码并编译

前往Download | Redis下载Redis源码,解压后使用make命令进行编译。make成功后会在src文件夹下产生一些二进制可执行文件,包括redis-server、redis-cli等等:

$ find . -type f -executable./redis-benchmark //用于进行redis性能测试的工具
./redis-check-dump //用于修复出问题的dump.rdb文件
./redis-cli //redis的客户端
./redis-server //redis的服务端
./redis-check-aof //用于修复出问题的AOF文件
./redis-sentinel //用于集群管理

启动redis

启动redis非常简单,进入到Redis源码的src目录,直接./redis-server就可以启动服务端了,还可以用下面的方法指定要加载的配置文件:

./redis-server ../redis.conf


默认情况下,redis-server会以非daemon的方式来运行,且默认服务端口为6379。

使用redis客户端

我们直接看一个使用redis-cli启动redis客户端的例子:
$ ./redis-cli
//用set指令来设置key、value
127.0.0.1:6379> set name "roc" 
OK
//来获取name的值
127.0.0.1:6379> get name 
"roc"
//通过客户端来关闭redis服务端
127.0.0.1:6379> shutdown 
127.0.0.1:6379>

Redis可视化插件

我们使用命令行想查看redis中的数据不太方便,所以我们需要一个可视化插件,前面文章已经提到过,安装一个将Database Client的插件,它可以将数据库可视化,同时也可以连接redis。

安装相关依赖

使用代码来操作redis需要安装Redis库,因nest.js官方推荐的redis库年久失修,考虑社区活跃度和稳定性选择@liaoliaots/nestjs-redis和ioredis:

npm install @liaoliaots/nestjs-redis ioredis

由于@liaoliaots/nestjs-redis依赖的nest.js组件版本过旧,npm install的时候会失败,需要在package.json中增加:

"overrides": {"@liaoliaots/nestjs-redis": {"@nestjs/common": "^10.0.0","@nestjs/core": "^10.0.0"},},

项目配置

一般我们会给对 redis 的操作单独建一个模块,后面有哪些模块需要使用 redis 直接引入这个模块即可,这里我们将模块命名为 cache,使用 nestcli 命令创建。

在service中我们实现一些常用的Redis操作:

import { InjectRedis } from '@liaoliaots/nestjs-redis'
import { Injectable } from '@nestjs/common'
import Redis from 'ioredis'@Injectable()
export class CacheService {constructor(@InjectRedis() private readonly client: Redis) { }getClient(): Redis {return this.client}/* --------------------- string 相关 -------------------------- *//**** @param key 存储 key 值* @param val key 对应的 val* @param seconds 可选,过期时间,单位 秒*/async set(key: string, val: string, seconds?: number): Promise<'OK' | null> {if (!seconds) return await this.client.set(key, val)return await this.client.set(key, val, 'EX', seconds)}/*** 返回对应 value* @param key*/async get(key: string): Promise<string | null> {if (!key || key === '*') return nullreturn await this.client.get(key)}async del(keys: string | string[]): Promise<number> {if (!keys || keys === '*') return 0if (typeof keys === 'string') keys = [keys]return await this.client.del(...keys)}
}

@Global() 装饰器使模块具有全局作用域。CacheModule的CacheService将无处不在,希望注入CacheService的模块将不需要在其导入数组中导入 CacheModule。同时为了注册经过配置的RedisModule,这里使用动态模块来创建自定义的模块,这个模块可以动态注册和配置provider:

import { Module, Global, DynamicModule } from '@nestjs/common';
import { CacheService } from './cache.service';
import { RedisModule, RedisModuleAsyncOptions, RedisModuleOptions } from '@liaoliaots/nestjs-redis'@Global()
@Module({exports: [CacheService],providers: [CacheService],
})
export class CacheModule {static forRoot(options: RedisModuleOptions, isGlobal = true): DynamicModule {return {module: CacheModule,imports: [RedisModule.forRoot(options, isGlobal)],providers: [CacheService],exports: [CacheService]}}static forRootAsync(options: RedisModuleAsyncOptions, isGlobal = true): DynamicModule {return {module: CacheModule,imports: [RedisModule.forRootAsync(options, isGlobal)],providers: [CacheService],exports: [CacheService]}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/700890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三十、项目实战:实时人脸检测

OpenCV3.3之后的版本都支持了深度学习框架&#xff0c;具体的模型相关路径如下图所示 一、相关文件下载 前期准备工作&#xff1a; 下载两个文件&#xff1a;下载链接 最好放到跟项目一块&#xff0c;到时候方便调用 二、代码 yy_main.cpp pbtxt_path和pb_path为下载的那…

Java 学习和实践笔记(20):static的含义和使用

static的本义是静止的。在计算机里就表示静态变量。 在Java中&#xff0c;从内存分析图上可以看到&#xff0c;它与类、常量池放在一个区里&#xff1a; 从图可以看到&#xff0c;普通的方法和对象属性&#xff0c;都在heep里&#xff0c;而static则在方法区里。 static声明的…

[晓理紫]每日论文分享(有中文摘要,源码或项目地址)--大模型、扩散模型

专属领域论文订阅 VX 关注{晓理紫}&#xff0c;每日更新论文&#xff0c;如感兴趣&#xff0c;请转发给有需要的同学&#xff0c;谢谢支持 如果你感觉对你有所帮助&#xff0c;请关注我&#xff0c;每日准时为你推送最新论文。 分类: 大语言模型LLM视觉模型VLM扩散模型视觉语言…

STL - 并查集

1、并查集原理 在一些应用问题中&#xff0c;需要将n个不同的元素划分成一些不相交的集合&#xff1b;开始时&#xff0c;每个元素自成一个 单元素集合&#xff0c;然后按一定的规律将归于同一组元素的集合合并&#xff1b;在此过程中要反复用到查询某一 个元素归属于那个集合的…

Ps:明度直方图

明度 Luminosity直方图显示了图像中各个亮度级别的像素分布情况。 与 RGB 直方图不同&#xff0c;“明度”直方图专注于图像的亮度信息&#xff0c;而不是单独的颜色信息。 在“直方图”面板的通道中选择“明度”。 “明度”直方图提供了一种量化的方式来理解图像的整体明暗结构…

速度提高100倍 - 扩展 RAG 应用程序,以实现数十亿个嵌入,并行计算余弦相似度

原文链接&#xff1a;100x Faster — Scaling Your RAG App for Billions of Embeddings 2024 年 2 月 15 日 RAG应用程序最大的问题之一是它们的计算检索时间。想象一下&#xff0c;你有一个向量数据库&#xff0c;包含一万亿条Embedding向量的记录。当您尝试将用户查询与一…

idea 打jar包、lib文件夹

idea目录文件 idea四层级结构 idea操作Java文件的基本单位&#xff1a;项目&#xff08;Project&#xff09;。对应四级结构 第1层级架构&#xff1a;项目&#xff08;project&#xff09; 在 IntelliJ IDEA 中Project是最顶级的结构单元&#xff0c;然后就是Module&#xf…

MySQL知识点总结(六)——InnoDB底层架构

MySQL知识点总结&#xff08;六&#xff09;——InnoDB底层架构 InnoDB底层架构总览InnoDB底层各组件分析Buffer PoolChange BufferLog BufferAdaptive Hash IndexSystem TablesapceUndo TablespacesRedo Log InnoDB底层架构总览 关于InnoDB底层架构&#xff0c;网上有一张非常…

Linux之JAVA环境配置Tomcat离线安装与启动

一&#xff0c;安装jdk和Tomcat 1.1上传JDK跟Tomcat 1.2解压 解压tomcat tar -zxvf apache-tomcat-8.5.20.tar.gz 解压jdk tar -zxvf jdk-8u151-linux-x64.tar.gz 1.3.配置环境变量 vim /etc/profile 在最后加上&#xff1a; #java environment export JAVA_HOME/usr/local/ja…

异步框架Celery在Django中的运用

参考博客&#xff1a;https://www.cnblogs.com/pyedu/p/12461819.html 参考视频&#xff1a;01 celery的工作机制_哔哩哔哩_bilibili 定义&#xff1a;简单灵活、处理大量消息的分布式系统&#xff0c;专注于实时处理异步队列&#xff0c;支持任务调度 主要架构&#xff1a; …

软件实例,物流货运配货单打印模板软件单据打印查询管理系统软件教程,可以同时打印标签或补打

软件实例&#xff0c;物流货运配货单打印模板软件单据打印查询管理系统软件教程&#xff0c;可以同时打印标签或补打 一、前言 以下软件教程以 佳易王物流单打印查询系统V17.1为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 这个版本在原来基…

【软件使用】postman使用教程

​ &#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;软件安装及使用 ⛳️ 功不唐捐&#xff0c;玉汝于成 ​ 目录 前言 正文 步骤1&#xff1a;安装Postman 步骤2&#xff1a;发送请求 步骤3&#xff1a;管理环境变量 步骤4&#xff1…

Leetcode 26-30题

删除有序数组中的重复项 给定一个有序数组&#xff0c;要求原地删除重复出现的元素&#xff0c;返回删除后的数组的长度。 这里的原地删除其实可以这样表示&#xff0c;用双指针从前往后扫一遍&#xff0c;遇到新的没出现过的元素就放到前面去&#xff0c;就可以实现删除后的数…

Linux线程同步(2)死锁与互斥锁

死锁&#xff08;Deadlock&#xff09;是指两个或两个以上的进程&#xff08;或线程&#xff09;在执行过程中&#xff0c;由于竞争资源或者由于彼此通信而造成的一种阻塞的现象&#xff0c;若无外力作用&#xff0c;它们都将无法推进下去。此时称系统处于死锁状态或系统产生了…

Java实现就医保险管理系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 科室档案模块2.2 医生档案模块2.3 预约挂号模块2.4 我的挂号模块 三、系统展示四、核心代码4.1 用户查询全部医生4.2 新增医生4.3 查询科室4.4 新增号源4.5 预约号源 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVue…

【前端素材】推荐优质后台管理系统Qovex平台模板(附源码)

一、需求分析 1、定义 后台管理系统是一种用于管理和监控网站、应用程序或系统的在线工具。它通常是通过网页界面进行访问和操作&#xff0c;用于管理网站内容、用户权限、数据分析等。后台管理系统是网站或应用程序的控制中心&#xff0c;管理员可以通过后台系统进行各种管理…

构造函数,原型,实例,类的关系整理

视频来源js原型链、构造函数和类_哔哩哔哩_bilibili 如视频所说&#xff0c;构造函数的prototype指向原型&#xff0c;实例化的对象的__proto__指向原型&#xff0c;原型通过constructor指向构造函数&#xff0c;正如class里面的constructor方法就相当于Person构造函数一样&am…

基于PID-bang-bang控制算法的卫星姿态控制matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于PID-bang-bang控制算法的卫星姿态控制。仿真输出控制器的控制收敛曲线&#xff0c;卫星姿态调整过程的动画。 2.系统仿真结果 3.核心程序与模型 版本&#xff1a;MATLAB…

前后端联调可能出现的问题

调不到后端数据 前后端传参方式不一样 --- formdata 主要接收文件 或者有文件和数据 --- json 纯数据

springboot+vue项目部署配置开机自启动

1.前端部属 下载nginx解压&#xff0c;在nginx\conf下找到nginx.conf 添加如下代码 server {listen 8081;server_name localhost;charset utf-8;location / {root F:/1ceshi/dist; #前端打包路径try_files $uri $uri/ /index.html;index index.html index.htm;}l…