記錄nodejs使用express搭建一個api服務器程序(6)-nodejs操作Redis 實現數據緩存

此文章是我自己用來記錄如何搭建一個以express爲基礎的api服務器框架的過程,並不是什麼新手教程,並不會每一步都寫得非常詳細,如果您要閱讀此文,需要一點nodejs和編寫代碼的基礎知識

文接上篇 鏈接: 地址 https://blog.csdn.net/goodboy31985/article/details/106315170
在上文基礎上,修改和完善api服務器的框架

nodejs操作Redis 實現數據緩存

安裝Redis

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

要在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數據庫
這些功能也會在以後的章節中介紹

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章