Mysql usa redis + canal para lograr la coherencia del caché

Tabla de contenido

1. Habilite los registros binlog

1. Primero verifique si binlog está habilitado

2. Habilite binlog y reinicie el servicio mysql.

2. Autorizar el canal para vincularse a MySQL. La cuenta tiene la autoridad para servir como esclavo de MySQL.

3. Descargar y configurar el canal

1. Descargue el canal, visite la página de lanzamiento, seleccione el paquete requerido para descargar, tome la versión 1.0.17 como ejemplo

2. Modifique el archivo de configuración instancia.properties en la carpeta conf\example

3. Inicie el servicio del canal (bat en Windows, sh en Linux)

4. Basado en el principio de notificación del Canal

5. Integración del proyecto

1. dependencia del pompón

2. Escribir dependencias

3. Modificar la clase de entidad Artículo

4. Escriba un oyente (sincronización de caché de Redis/jvm) 

6. Prueba

1. Datos de la tabla de la base de datos y datos de Redis.

2. Agregar datos

3. Modificar datos

Editar 4. Eliminar datos


1. Habilite los registros binlog

1. Primero verifique si binlog está habilitado

mostrar variables como '%log_bin%';

Si está APAGADO, el bit de instrucción se activa

2. Habilite binlog y reinicie el servicio mysql.

Haga clic derecho en Mi PC - Administrar - Servicios - MYSQL - Propiedades

Aquí está mi dirección.ini

Agregar en [mysqld]

log-bin = mysqlbinlog

formato-binlog=FILA

Insertar descripción de la imagen aquí

Después de la configuración, debe reiniciar el servicio mysql.

Ver el estado de 

mostrar variables como '%log_bin%';

Abierto con éxito 

2. Autorizar el canal para vincularse a MySQL. La cuenta tiene la autoridad para servir como esclavo de MySQL.

CREAR USUARIO canal IDENTIFICADO POR 'canal';  
CONCEDER SELECCIÓN, ESCLAVO DE REPLICACIÓN, CLIENTE DE REPLICACIÓN EN *.* A 'canal'@'%';
-- OTORGAR TODOS LOS PRIVILEGIOS EN *.* A 'canal'@'%' ;
PRIVILEGIOS DE ENJUAGUE;

3. Descargar y configurar el canal

1. Descargue el canal, visite  la  página de lanzamiento, seleccione el paquete requerido para descargar, tome la versión 1.0.17 como ejemplo

O use mis archivos: Alibaba Cloud Disk Sharing

Después de la descompresión

2. Modifique el archivo de configuración instancia.properties en la carpeta conf\example

archivo de configuración final

#################################################

## mysql serverId, v1.0.26+ se generará automáticamente

# canal.instancia.mysql.slaveId=0

# habilitar gtid usa verdadero/falso

canal.instance.gtidon=falso

# información de posición

canal.instance.master.address=127.0.0.1:3306

canal.instancia.master.diario.nombre=

canal.instancia.master.position=

canal.instance.master.timestamp=

canal.instancia.master.gtid=

# rds oss binlog

canal.instancia.rds.accesskey=

canal.instance.rds.secretkey=

canal.instance.rds.instanceId=

# información de meta tsdb de la tabla

canal.instance.tsdb.enable=true

#canal.instance.tsdb.url=jdbc:mysql://127.0.0.1:3306/canal_tsdb

#canal.instance.tsdb.dbNombre de usuario=canal

#canal.instance.tsdb.dbContraseña=canal

#canal.instancia.dirección.en espera =

#canal.instancia.standby.diario.nombre =

#canal.instancia.posición.en espera =

#canal.instancia.standby.timestamp =

#canal.instancia.standby.gtid=

# usuario Contraseña

canal.instance.dbUsername=raíz

canal.instance.dbContraseña=msir1234

canal.instance.connectionCharset = UTF-8

# habilitar druida Descifrar la contraseña de la base de datos

canal.instance.enableDruid=falso

#canal.instance.pwdPublicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALK4BUxdDltRRE5/zXpVEVPUgunvscYFtEip3pmLlhrWpacX7y7GCMo2/JM6LeHmiiNdH1FWgGCpUfircSwlWKUCAwEAAQ==

# expresión regular de la tabla

canal.instance.filter.regex=.*\\..*

# tabla de expresiones regulares negras

canal.instance.filter.black.regex=mysql\\.slave_.*

# filtro de campo de tabla (formato: esquema1.nombretabla1:campo1/campo2,esquema2.nombretabla2:campo1/campo2)

#canal.instance.filter.field=test1.t_product:id/asunto/palabras clave,test2.t_company:id/nombre/contacto/ch

# filtro negro del campo de la tabla (formato: esquema1.nombretabla1:campo1/campo2,esquema2.nombretabla2:campo1/campo2)

#canal.instance.filter.black.field=test1.t_product:subject/product_image,test2.t_company:id/name/contact/ch

# configuración mq

canal.mq.topic=ejemplo

# ruta de tema dinámico por esquema o expresión regular de tabla

#canal.mq.dynamicTopic=miprueba1.usuario,tema2:miprueba2\\..*,.*\\..*

canal.mq.partición=0

# configuración de partición hash

#canal.mq.enableDynamicQueuePartition=falso

#canal.mq.particionesNum=3

#canal.mq.dynamicTopicPartitionNum=test.*:4,mycanal:6

#canal.mq.partitionHash=test.table:id^nombre,.*\\..*

#################################################

3. Inicie el servicio del canal (bat en Windows, sh en Linux)

 Haga clic en startup.bat para comenzar

Verifique el registro logs\canal\canal.log, si el inicio es exitoso, será como se muestra a continuación.

4. Basado en el principio de notificación del Canal

Insertar descripción de la imagen aquí

Interpretación:

  • Una vez que el servicio del producto completa la modificación del producto, el negocio finaliza directamente sin ninguna intrusión de código.
  • Canal monitorea los cambios en la base de datos MySQL y notifica inmediatamente al servicio de caché cuando se detectan cambios.
  • El servicio de caché recibe la notificación del canal y actualiza el caché.

5. Integración del proyecto

1. dependencia del pompón

Utilice el cliente de inicio de canal de código abierto de terceros en GitHub. Dirección: https://github.com/NormanGyllenhaal/canal-client

<dependencia>
        <groupId>top.javatool</groupId>
        <artifactId>canal-spring-boot-starter</artifactId>
        <versión>1.2.1-RELEASE</versión>
</dependencia>

2. Escribir dependencias

canal:
   destino:
   servidor de ejemplo: localhost:11111 #dirección IP y puerto del canal

3. Modificar la clase de entidad Artículo

Lo que Canal envía al cliente de canal es la fila de datos modificada (fila), y el cliente de canal que presentamos nos ayudará a encapsular los datos de la fila en la clase de entidad Elemento. Este proceso requiere conocer la relación de mapeo entre la base de datos y las entidades. Necesidad de utilizar anotaciones JPA:

Complete el mapeo entre los campos de la tabla de elementos y de la base de datos mediante @Id, @Column y otras anotaciones:

Tenga en cuenta que si es diferente del nombre de la base de datos, se debe utilizar @Column

package com.springboot3.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import lombok.Data;

import javax.persistence.Column;
import javax.persistence.Id;

/**
 * 
 * @TableName course
 */
@TableName(value ="course")
@Data
public class Course implements Serializable {
    /**
     * 
     */
    @Id
    @TableId
    private String id;

    /**
     * 
     */
    private String name;

    /**
     * 
     */
    @Column(name = "teacher_id")
    private String teacherId;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}

4. Escriba un oyente (sincronización de caché de Redis/jvm) 

EntryHandler<T>Escriba un oyente implementando la interfaz para escuchar los mensajes del Canal. Tenga en cuenta dos puntos:

  • La clase de implementación @CanalTable("course")especifica la información de la tabla que se monitoreará.
  • El tipo genérico de EntryHandler es la clase de entidad correspondiente a la tabla.
package com.springboot3.handler;

import com.springboot3.domain.Course;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import top.javatool.canal.client.annotation.CanalTable;
import top.javatool.canal.client.handler.EntryHandler;

@CanalTable(value = "Course")
@Component
@Slf4j
public class CourseHandler implements EntryHandler<Course> {
    @Autowired
    private RedisTemplate redisTemplate;

    @Override
    public void insert(Course course) {
        log.info("insert message  {}", course);
        redisTemplate.opsForValue().set(course.getId(),course);
    }

    @Override
    public void update(Course before, Course after) {
        log.info("update before {} ", before);
        log.info("update after {}", after);
        redisTemplate.opsForValue().set(after.getId(),after);

    }

    @Override
    public void delete(Course course) {
        log.info("delete  {}", course);
        redisTemplate.delete(course.getId());

    }
}

6. Prueba

1. Datos de la tabla de la base de datos y datos de Redis.

base de datos:

Redis:

2. Agregar datos

Agregar física de datos

La consola muestra:

base de datos redis:

3. Modificar datos

Cambiar la física por la química.

La consola muestra:

base de datos redis:

4. Eliminar datos

Eliminar materia de química

datos de la consola

 datos de la base de datos de redis:

Supongo que te gusta

Origin blog.csdn.net/weixin_55127182/article/details/132280538
Recomendado
Clasificación