此文章是我自己用来记录如何搭建一个以express为基础的api服务器框架的过程,并不是什么新手教程,并不会每一步都写得非常详细,如果您要阅读此文,需要一点nodejs和编写代码的基础知识
文接上篇 链接: 地址 https://blog.csdn.net/goodboy31985/article/details/106315170
在上文基础上,修改和完善api服务器的框架
redis是一个高速的内存数据库,支持多种数据结构
由于mysql这类数据库系统,操作一般都比较慢,为了降低访问mysql的频率,通常我们会把redis作为一个数据缓存,充分利用其高速的特点,将一些频繁访问,但是变化不多的数据,缓存在内存中,
例如,我需要记录网站的访问人数,由于访问量很大,这个访问人数统计是在不断增加的,因此,我们不会每当有一个人来访问,就把这个数据写入数据库,而是先把这个数据缓存起来,再定期写入数据库中,这样可以大大降低数据库的读写频率
和memcached有些类似,但是与memcached相比,redis功能更加丰富一点,支持的数据结构更多,更重要的一点,redis是可以数据持久化的,机器重启了,数据也能得到保留(和持久化的策略设置有关),因此,你甚至可以把redis直接作为数据库来使用
之前的文章中已经写过使用Docker来部署本地Redis的内容,所以安装Redis请直接参考
Docker部署Redis
文章中也推荐的一款Redis的图形化客户端
链接: AnotherRedisDesktopManager
https://github.com/qishibo/AnotherRedisDesktopManager/releases
可以实时查看Redis中的数据
要在nodejs中使用Redis,需要安装客户端推荐的有 redis ioredis tedis等,都非常出色,
这里我就使用ioredis
先在项目中安装ioredis
npm install --save ioredis
npm install --save-dev @types/ioredis
ioredis的文档可以参考 ioredis文档 https://github.com/luin/ioredis
然后在项目中新建一个CacheManager的文件,创建一个缓存管理类,来管理Redis的操作
CacheManager.ts文件内容
// lib/common/CacheManager.ts
import ioredis, { Redis } from "ioredis"
export class CacheManager
{
//单例
private static instance: CacheManager = null;
private constructor()
{
}
public static GetInstance()
{
if (CacheManager.instance == null)
{
CacheManager.instance = new CacheManager();
}
return CacheManager.instance;
}
//mysql数据库对象
redis: Redis = null;
InitRedis()
{
//new一个redis对象,可以配置一些参数,也可以保持默认值
this.redis = new ioredis(
//{
//port: 6379, // Redis port
//host: "127.0.0.1", // Redis host
//family: 4, // 4 (IPv4) or 6 (IPv6)
//password: "auth",
//db: 0,
//}
);
//错误监听
this.redis.on("error", function (err)
{
console.error("Error ", err);
});
this.redis.on("ready", function (err)
{
console.info("redisCache connection succeed")
});
}
}
//导出RedisManager这个单例对象,其他的文件中使用这个导出的对象即可
export const cache = CacheManager.GetInstance();
接下来在start.ts中写一些简单的测试代码,测试redis是否正常运行
//start.ts
import fs from "fs"
import json5 from "json5";
import path from 'path'
import { ApiServer } from "./ApiServer/ApiServer";
import { LogHelper } from "./lib/common/LogHelper";
import { db } from "./lib/common/DBManager";
import { cache } from "./lib/common/CacheManager";
//项目根目录
export const rootDir = __dirname + "/";
//加载配置文件
//读取json5文件内容
let jsonFile = fs.readFileSync(path.join(rootDir, "config.json5")).toString();
//解析为json文件,并作为模块输出
export let config = json5.parse(jsonFile);
async function main()
{
//日志增强功能初始化
LogHelper.Init();
console.log("app start");
//数据库连接初始化
db.InitMysql();
//Redis初始化
cache.InitRedis();
//Redis测试
//1 直接设置key-value 并且在100秒后过期
let result = await cache.redis.set("visitorCount", 1,"EX",100)
console.log("result:",result);
//2 读取刚刚设置的key的值
let value = await cache.redis.get("visitorCount");
console.log("visitorCount:", value);
//3 设置hash 并且在300秒后过期
await cache.redis.hset("1", "id", 1);
await cache.redis.hset("1", "name", "zhang")
await cache.redis.hset("1", "age", 35)
await cache.redis.hset("1", "phone", "15965874521")
await cache.redis.expire("1", 300);
//4 读取刚刚设置的内容
let hValue = await cache.redis.hgetall("1");
console.log("hValue:",hValue);
// ApiServer.GetInstance().Init();
// await ApiServer.GetInstance().Run();
}
main();
运行代码查看log日志
正常设置了值,并获取到了
再使用Redis的图形客户端检查一下
以上便是最简单的Redis的使用,Redis拥有很多的特性和数据结构,细节的使用方式会在以后的章节中介绍
并且Redis很多时候是作为关系型数据库的补充,一般作为系统的缓存使用,比如 Redis+Mysql组合,频繁读写的数据会先经过Redis,尽量避免过于频繁得去读写mysql数据库
这些功能也会在以后的章节中介绍