Um artigo nodejs para dominar como usar redis e como usá-lo como cache

prefácio

Redis é um banco de dados muito útil. O método de acesso de pares chave-valor é muito simples. Muitas vezes é usado como cache. Como usar como cache de banco de dados, problema de falha de conexão remota do redis, problema de perda de dados do redis, duas configurações persistentes de RDB e AOF.

Instalar

janelas

O site oficial do Redis não fornece download da versão da janela, carreguei e instalei o pacote: redis-win64 .

linux

Baixe no site oficial: site oficial redis

comece

windows inicia como serviço

Descompacte o Redis-x64-3.2.100.zip dentro de um local adequado e renomeie-o para Redis.

cmd entra no Redis e executa o seguinte comando para iniciar o serviço:

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

Outros comandos:

  1. Desinstale o serviço:redis-server --service-uninstall
  2. Inicie o serviço:redis-server --service-start
  3. Fora de serviço:redis-server --service-stop
  4. Renomear serviço:redis-server --service-name name

linux iniciar como serviço

Pagode (recomendado)

O Pagoda linux pode instalar diretamente o serviço de inicialização automática.

Instalação manual

descomprimir

tar -xzvf redis-6.2.6.tar.gz

Entrar

cd redis-6.2.6

Instalar

make & make install

Verifique se há um diretório src ou bin no diretório, insira o diretório src ou bin e inicie

./redis-server

teste

O restante dos testes de conteúdo são todas as operações do Windows.

cmd no Redis

redis-cli
set test 123
get test

insira a descrição da imagem aqui

usado em nodejs

pacote de guia

npm i redis 

usar

Como várias operações do redis são assíncronas, nós o envolvemos em uma função assíncrona, o que é muito mais conveniente.

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
})()

Use na interface com expresso

Além disso, importa express(serviço) e cors(resolve entre domínios) e coloca todas as criações no escopo da função assíncrona .

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('服务器启动')
    })
})()

Teste de front-end

<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>

insira a descrição da imagem aqui

redis como cache de banco de dados

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('服务器启动')
    })
})()

O conteúdo do front-end permanece inalterado e o teste é solicitado continuamente.

Descobrimos que o conteúdo lido do banco de dados será armazenado em cache por 5 segundos e as solicitações dentro de 5 segundos virão do cache.

Quando o tempo de cache termina, ele é lido do banco de dados e armazenado no cache novamente, reduzindo a pressão no banco de dados.
insira a descrição da imagem aqui

Problema de falha de conexão remota do Redis

O Windows modifica o diretório redis redis.windows.confe o linux o modifica redis.conf.

Comentebind 127.0.0.1 , defina Modo Protegido Desligado protected-modepara no.

Reinstale o serviço novamente.
insira a descrição da imagem aqui
insira a descrição da imagem aqui

redis persistência

Às vezes, os dados do redis são fáceis de serem perdidos acidentalmente , e às vezes precisamos deixá-lo salvar alguns dados permanentes, então precisamos fazer persistência.

Existem dois tipos de persistência: RDBe AOF.

Não estou introduzindo as perguntas da entrevista aqui, portanto, não apresentarei os significados detalhados dos dois tipos em detalhes, que podem ser facilmente entendidos:

  1. RDBDe acordo com as regras, os dados de backup são gravados regularmente no disco rígido e os dados de backup são lidos quando os dados são perdidos .

  2. AOFÉ para salvar sua operação de redis todas as vezes e, se os dados forem perdidos, execute a operação de redis original salva por sua vez e gere novamente os dados correspondentes .

Configuração RDB

Depois redis.confde adicionar as opções a seguir, reinicie o serviço redis.

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

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

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

Configuração AOF

Depois redis.confde adicionar as opções a seguir, reinicie o serviço 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/

palavras finais

Eu acredito que você dominou o uso do redis quando você vê aqui. Se você acha que o artigo não é ruim, por favor, curta e colete. Se você tiver algum erro ou sugestão, pode deixar uma mensagem, obrigado ~

Acho que você gosta

Origin blog.csdn.net/weixin_43877799/article/details/123406332
Recomendado
Clasificación