redisの使用方法とキャッシュとしての使用方法をマスターするnodejsの記事

序文

Redisは非常に便利なデータベースです。キーと値のペアのアクセス方法は非常にシンプルです。キャッシュとしてよく使用されます。データベースキャッシュとしての使用方法、redisリモート接続障害の問題、redisデータ損失の問題、2つの永続的な構成RDBとAOF。

インストール

ウィンドウズ

Redisの公式ウェブサイトではウィンドウバージョンのダウンロードは提供されていません。パッケージredis-win64をアップロードしてインストールしました。

Linux

公式ウェブサイトからダウンロード:redis公式ウェブサイト

起動

Windowsはサービスとして開始します

内部のRedis-x64-3.2.100.zipを適切な場所に解凍し、名前をRedisに変更します。

cmdはRedisに入り、次のコマンドを実行してサービスを開始します。

redis-server.exe --service-install redis.windows.conf --loglevel verbose
redis-server --service-start

その他のコマンド:

  1. サービスをアンインストールします。redis-server --service-uninstall
  2. サービスを開始します。redis-server --service-start
  3. 故障中:redis-server --service-stop
  4. サービスの名前を変更します。redis-server --service-name name

Linuxはサービスとして開始

パゴダ(推奨)

Pagoda linuxは、自動開始サービスを直接インストールできます。

手動インストール

解凍

tar -xzvf redis-6.2.6.tar.gz

入力

cd redis-6.2.6

インストール

make & make install

ディレクトリにsrcまたはbinディレクトリがあるかどうかを確認し、srcまたはbinディレクトリを入力して、開始します。

./redis-server

テスト

残りのコンテンツテストはすべてWindowsの操作です。

Redisへのcmd

redis-cli
set test 123
get test

ここに画像の説明を挿入

nodejsで使用

ガイドパッケージ

npm i redis 

使用する

redisのさまざまな操作は非同期であるため、非同期関数でラップします。これははるかに便利です。

import {
    
    createClient} from 'redis'

(async () => {
    
    
    //创建redis客户端
    const redis = createClient()
    //连接
    await redis.connect()
    //set
    await redis.set('test', '123')
    //get
    const value = await redis.get('test')
    console.log(value)//123
})()

Expressとのインターフェースで使用

expressこれはさらに(サービス)とcors(クロスドメインを解決する)をインポートし、すべての作成を非同期関数のスコープに入れます。

import express from 'express'
import cors from 'cors'
import path from 'path'
import {
    
    createClient} from 'redis'

(async () => {
    
    
    const app = new express()
    app.use(express.json())
    app.use(cors())
    app.use(express.static(path.resolve('./img')))

    const redis = createClient()
    await redis.connect()

    app.get('/getValue', async (req, res) => {
    
    
        await redis.set('key', 'value')
        const value = await redis.get('key')
        res.send({
    
    value})
    })

    app.listen(3000, () => {
    
    
        console.log('服务器启动')
    })
})()

フロントエンドテスト

<body>
<button onclick="test()">获取信息</button>
<script>
    const test = async () => {
     
     
        const res = await fetch('http://localhost:3000/getValue')
        const data = await res.json()
        console.log(data)
    }
</script>
</body>

ここに画像の説明を挿入

データベースキャッシュとしてのredis

import express from 'express'
import cors from 'cors'
import path from 'path'
import {
    
    createClient} from 'redis'

(async () => {
    
    
    const app = new express()
    app.use(express.json())
    app.use(cors())
    app.use(express.static(path.resolve('./img')))

    const redis = createClient()
    await redis.connect()

    const cache = async (req, res, next) => {
    
    
        //尝试读取缓存中的数据
        const value = await redis.get('key')
        if (value) {
    
    
            res.send({
    
    value: '数据来自缓存:' + value})
        } else {
    
    
            //不存在则去进行数据库读取
            next()
        }
    }

    app.get('/getValue', cache, async (req, res) => {
    
    
        //这里偷个懒用databaseValue代替数据库读取来的数据
        const databaseValue = 'value'
        //用setEx函数存入redis,中间的数字代表缓存时间,这里设置为5秒方便测试
        await redis.setEx('key', 5, databaseValue)
        const value = await redis.get('key')
        res.send({
    
    value: '数据来自数据库:' + value})
    })

    app.listen(3000, () => {
    
    
        console.log('服务器启动')
    })
})()

フロントエンドの内容は変更されておらず、テストは継続的に要求されます。

データベースから読み取られたコンテンツは5秒間キャッシュされ、5秒以内のリクエストはキャッシュから送信されることがわかりました。

キャッシュ時間が経過すると、データベースから読み取られて再びキャッシュに格納されるため、データベースへの負荷が軽減されます。
ここに画像の説明を挿入

Redisリモート接続障害の問題

Windowsはredisディレクトリを変更しredis.windows.conf、Linuxはそれを変更しredis.confます。

コメントbind 127.0.0.1、保護モードをオフprotected-modeに設定しnoます。

サービスを再インストールします。
ここに画像の説明を挿入
ここに画像の説明を挿入

redisの永続性

redisデータが誤って失われやすい場合や、永続的なデータを保存する必要がある場合があるため、永続化する必要があります。

永続性には、との2つのタイプがありRDBますAOF

ここでは面接の質問を紹介しないので、簡単に理解できる2つのタイプの詳細な意味を詳しく紹介しません。

  1. RDB規則に従い、バックアップデータは定期的にハードディスクに書き込まれ、データが失われたときにバックアップデータが読み取られます。

  2. AOF毎回redis操作を保存し、データが失われた場合は、保存した元のredis操作を順番に実行し、対応するデータを再生成します

RDB構成

次のオプションを追加した後redis.conf、redisサービスを再起動します。

save 900 1 # 900s内至少达到一条写命令

save 300 10 # 300s内至少达至10条写命令

save 60 10000 # 60s内至少达到10000条写命令

AOF構成

次のオプションを追加した後redis.conf、redisサービスを再起動します。

# 开启aof机制
appendonly yes

# aof文件名
appendfilename "appendonly.aof"

# 写入策略,always表示每个写操作都保存到aof文件中,也可以是everysec或no
# always保存每次操作最安全
# everysec每秒保存一次,最多可能会丢失1s数据
# no交给操作系统控制,未知因素更多,最不安全
appendfsync always

# 默认不重写aof文件
no-appendfsync-on-rewrite no

# 保存目录
dir ~/redis/

終わりの言葉

ここを見ると、redisの使い方をマスターしていると思います。記事が悪くないと思われる場合は、気に入って集めてください。間違いや提案があれば、メッセージを残してください。ありがとうございます〜

おすすめ

転載: blog.csdn.net/weixin_43877799/article/details/123406332