Un artículo de nodejs para dominar cómo usar redis y cómo usarlo como caché

prefacio

Redis es una base de datos muy útil. El método de acceso de pares clave-valor es muy simple. A menudo se usa como caché. Cómo usar como caché de base de datos, problema de falla de conexión remota de redis, problema de pérdida de datos de redis, dos configuraciones persistentes de RDB y AOF.

Instalar en pc

ventanas

El sitio web oficial de Redis no proporciona la descarga de la versión de Windows, cargué e instalé el paquete: redis-win64 .

linux

Descargar en el sitio web oficial: sitio web oficial de redis

puesta en marcha

Windows comienza como servicio

Descomprima Redis-x64-3.2.100.zip en una ubicación adecuada y cámbiele el nombre a Redis.

cmd ingresa a Redis y ejecuta el siguiente comando para iniciar el servicio:

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

Otros comandos:

  1. Desinstalar el servicio:redis-server --service-uninstall
  2. Iniciar el servicio:redis-server --service-start
  3. Fuera de servicio:redis-server --service-stop
  4. Cambiar el nombre del servicio:redis-server --service-name name

inicio de linux como servicio

Pagoda (recomendado)

Pagoda linux puede instalar directamente el servicio de inicio automático.

Instalación manual

descomprimir

tar -xzvf redis-6.2.6.tar.gz

Ingresar

cd redis-6.2.6

Instalar en pc

make & make install

Verifique si hay un directorio src o bin en el directorio, ingrese el directorio src o bin y comience

./redis-server

prueba

El resto de las pruebas de contenido son todas operaciones de Windows.

cmd en Redis

redis-cli
set test 123
get test

inserte la descripción de la imagen aquí

utilizado en nodejs

paquete de guía

npm i redis 

utilizar

Debido a que varias operaciones de redis son asíncronas, las envolvemos en una función asíncrona, que es mucho más 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
})()

Uso en interfaz con express

Esto, además, importa express(servicio) y cors(resuelve dominios cruzados), y coloca todas las creaciones en el ámbito de la función así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('服务器启动')
    })
})()

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

inserte la descripción de la imagen aquí

redis como caché de base de datos

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

El contenido de front-end no cambia y la prueba se solicita continuamente.

Descubrimos que el contenido leído de la base de datos se almacenará en caché durante 5 segundos, y las solicitudes dentro de los 5 segundos provendrán del caché.

Cuando se agota el tiempo de la memoria caché, se lee de la base de datos y se almacena nuevamente en la memoria caché, lo que reduce la presión sobre la base de datos.
inserte la descripción de la imagen aquí

Problema de falla de conexión remota de Redis

Windows modifica el directorio redis redis.windows.confy Linux lo modifica redis.conf.

Comentebind 127.0.0.1 , desactive el Modo protegido protected-modeen no.

Vuelva a instalar el servicio de nuevo.
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

redis persistencia

A veces, los datos de redis se pierden accidentalmente con facilidad y, a veces, debemos dejar que guarde algunos datos permanentes, por lo que debemos ser persistentes.

Hay dos tipos de persistencia: RDBy AOF.

No estoy presentando las preguntas de la entrevista aquí, por lo que no presentaré los significados detallados de los dos tipos en detalle, que pueden entenderse fácilmente:

  1. RDBDe acuerdo con las reglas, los datos de la copia de seguridad se escriben regularmente en el disco duro y los datos de la copia de seguridad se leen cuando se pierden .

  2. AOFEs para guardar su operación de redis cada vez, y si los datos se pierden, ejecute la operación de redis guardada original a su vez y regenere los datos correspondientes .

configuración RDB

Después redis.confde agregar las siguientes opciones, reinicie el servicio redis.

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

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

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

configuración AOF

Después redis.confde agregar las siguientes opciones, reinicie el servicio 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/

palabras finales

Creo que has dominado el uso de redis cuando ves aquí. Si crees que el artículo no es malo, dale me gusta y recógelo. Si tienes algún error o sugerencia, puedes dejar un mensaje, gracias ~

Supongo que te gusta

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