国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

mysql使用redis+canal實(shí)現(xiàn)緩存一致性

這篇具有很好參考價(jià)值的文章主要介紹了mysql使用redis+canal實(shí)現(xiàn)緩存一致性。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

一、開(kāi)啟binlog日志

1.首先查看是否開(kāi)啟了binlog

2、開(kāi)啟binlog日志,并重啟mysql服務(wù)

二、授權(quán) canal 鏈接 MySQL 賬號(hào)具有作為 MySQL slave 的權(quán)限

三、下載配置canal

1、下載 canal, 訪問(wèn)?release?頁(yè)面 , 選擇需要的包下載, 如以 1.0.17 版本為例

2、?修改conf\example文件夾下instance.properties配置文件

3、啟動(dòng)canal服務(wù)(windows下是bat,linux是sh)

四、基于Canal通知原理

五、項(xiàng)目集成

1、pom依賴

2、編寫依賴

3、修改Item實(shí)體類

4、編寫監(jiān)聽(tīng)器(Redis/ jvm緩存同步)?

六、測(cè)試

1、數(shù)據(jù)庫(kù)表數(shù)據(jù)和redis數(shù)據(jù)

2、添加數(shù)據(jù)

3、修改數(shù)據(jù)

?編輯4、刪除數(shù)據(jù)


一、開(kāi)啟binlog日志

1.首先查看是否開(kāi)啟了binlog

show variables like '%log_bin%';

mysql使用redis+canal實(shí)現(xiàn)緩存一致性,緩存,mysql,redis

如果是OFF說(shuō)明位開(kāi)啟

2、開(kāi)啟binlog日志,并重啟mysql服務(wù)

右鍵我的電腦——管理——服務(wù)——MYSQL——屬性

mysql使用redis+canal實(shí)現(xiàn)緩存一致性,緩存,mysql,redis

這里是my.ini地址

在[mysqld]底下添加

log-bin= mysqlbinlog

binlog-format=ROW

mysql使用redis+canal實(shí)現(xiàn)緩存一致性,緩存,mysql,redis

配置好之后,要進(jìn)行重啟mysql服務(wù)

查看狀態(tài)?

show variables like '%log_bin%';

mysql使用redis+canal實(shí)現(xiàn)緩存一致性,緩存,mysql,redis

開(kāi)啟成功?

二、授權(quán) canal 鏈接 MySQL 賬號(hào)具有作為 MySQL slave 的權(quán)限

CREATE USER canal IDENTIFIED BY 'canal'; ?
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;

三、下載配置canal

1、下載 canal, 訪問(wèn)?release?頁(yè)面 , 選擇需要的包下載, 如以 1.0.17 版本為例

或者使用我的文件:阿里云盤分享

mysql使用redis+canal實(shí)現(xiàn)緩存一致性,緩存,mysql,redis

解壓后

mysql使用redis+canal實(shí)現(xiàn)緩存一致性,緩存,mysql,redis

2、?修改conf\example文件夾下instance.properties配置文件

mysql使用redis+canal實(shí)現(xiàn)緩存一致性,緩存,mysql,redis

最終配置文件

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

## mysql serverId , v1.0.26+ will autoGen

# canal.instance.mysql.slaveId=0

# enable gtid use true/false

canal.instance.gtidon=false

# position info

canal.instance.master.address=127.0.0.1:3306

canal.instance.master.journal.name=

canal.instance.master.position=

canal.instance.master.timestamp=

canal.instance.master.gtid=

# rds oss binlog

canal.instance.rds.accesskey=

canal.instance.rds.secretkey=

canal.instance.rds.instanceId=

# table meta tsdb info

canal.instance.tsdb.enable=true

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

#canal.instance.tsdb.dbUsername=canal

#canal.instance.tsdb.dbPassword=canal

#canal.instance.standby.address =

#canal.instance.standby.journal.name =

#canal.instance.standby.position =

#canal.instance.standby.timestamp =

#canal.instance.standby.gtid=

# username/password

canal.instance.dbUsername=root

canal.instance.dbPassword=msir1234

canal.instance.connectionCharset = UTF-8

# enable druid Decrypt database password

canal.instance.enableDruid=false

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

# table regex

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

# table black regex

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

# table field filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2)

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

# table field black filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2)

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

# mq config

canal.mq.topic=example

# dynamic topic route by schema or table regex

#canal.mq.dynamicTopic=mytest1.user,topic2:mytest2\\..*,.*\\..*

canal.mq.partition=0

# hash partition config

#canal.mq.enableDynamicQueuePartition=false

#canal.mq.partitionsNum=3

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

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

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

3、啟動(dòng)canal服務(wù)(windows下是bat,linux是sh)

mysql使用redis+canal實(shí)現(xiàn)緩存一致性,緩存,mysql,redis

?點(diǎn)擊startup.bat啟動(dòng)

mysql使用redis+canal實(shí)現(xiàn)緩存一致性,緩存,mysql,redis

查看日志?logs\canal\canal.log,如果啟動(dòng)成功則如下圖

mysql使用redis+canal實(shí)現(xiàn)緩存一致性,緩存,mysql,redis

四、基于Canal通知原理

mysql使用redis+canal實(shí)現(xiàn)緩存一致性,緩存,mysql,redis

解讀:

  • 商品服務(wù)完成商品修改后,業(yè)務(wù)直接結(jié)束,沒(méi)有任何代碼侵入
  • Canal監(jiān)聽(tīng)MySQL數(shù)據(jù)庫(kù)的變化,當(dāng)發(fā)現(xiàn)變化后,立即通知緩存服務(wù)。
  • 緩存服務(wù)接收到canal通知,更新緩存

五、項(xiàng)目集成

1、pom依賴

使用GitHub上的第三方開(kāi)源的canal-starter客戶端。地址:https://github.com/NormanGyllenhaal/canal-client

<dependency>
????????<groupId>top.javatool</groupId>
????????<artifactId>canal-spring-boot-starter</artifactId>
????????<version>1.2.1-RELEASE</version>
</dependency>

2、編寫依賴

canal:
? ?destination: example
? ?server: localhost:11111? ? ? ? #canal的ip地址和端口

3、修改Item實(shí)體類

Canal推送給canal-client的是被修改的這一行數(shù)據(jù)(row),而我們引入的canal-client則會(huì)幫我們把行數(shù)據(jù)封裝到Item實(shí)體類中。這個(gè)過(guò)程需要知道數(shù)據(jù)庫(kù)與實(shí)體的映射關(guān)系。需要用到JPA的注解:

通過(guò)@Id、@Column等注解完成Item與數(shù)據(jù)庫(kù)表字段的映射:

注意,如果和數(shù)據(jù)庫(kù)名稱不同必須用@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、編寫監(jiān)聽(tīng)器(Redis/ jvm緩存同步)?

通過(guò)實(shí)現(xiàn)EntryHandler<T>接口編寫監(jiān)聽(tīng)器,監(jiān)聽(tīng)Canal消息。注意兩點(diǎn):

  • 實(shí)現(xiàn)類通過(guò)@CanalTable("course")指定監(jiān)聽(tīng)的表信息。
  • EntryHandler的泛型是與表對(duì)應(yīng)的實(shí)體類
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());

    }
}

六、測(cè)試

1、數(shù)據(jù)庫(kù)表數(shù)據(jù)和redis數(shù)據(jù)

數(shù)據(jù)庫(kù):

mysql使用redis+canal實(shí)現(xiàn)緩存一致性,緩存,mysql,redis

redis:

mysql使用redis+canal實(shí)現(xiàn)緩存一致性,緩存,mysql,redis

2、添加數(shù)據(jù)

添加數(shù)據(jù)物理

mysql使用redis+canal實(shí)現(xiàn)緩存一致性,緩存,mysql,redis

控制臺(tái)顯示:

mysql使用redis+canal實(shí)現(xiàn)緩存一致性,緩存,mysql,redis

redis數(shù)據(jù)庫(kù):

mysql使用redis+canal實(shí)現(xiàn)緩存一致性,緩存,mysql,redis

3、修改數(shù)據(jù)

將物理修改為化學(xué)

mysql使用redis+canal實(shí)現(xiàn)緩存一致性,緩存,mysql,redis

控制臺(tái)顯示:

mysql使用redis+canal實(shí)現(xiàn)緩存一致性,緩存,mysql,redis

redis數(shù)據(jù)庫(kù):

4、刪除數(shù)據(jù)

刪除化學(xué)科目

mysql使用redis+canal實(shí)現(xiàn)緩存一致性,緩存,mysql,redis

控制臺(tái)數(shù)據(jù)

mysql使用redis+canal實(shí)現(xiàn)緩存一致性,緩存,mysql,redis

?redis數(shù)據(jù)庫(kù)數(shù)據(jù):

mysql使用redis+canal實(shí)現(xiàn)緩存一致性,緩存,mysql,redis文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-649413.html

到了這里,關(guān)于mysql使用redis+canal實(shí)現(xiàn)緩存一致性的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Redis緩存MySQL數(shù)據(jù)庫(kù)存儲(chǔ)二者如何保證數(shù)據(jù)一致性

    在大型互聯(lián)網(wǎng)應(yīng)用中,由于數(shù)據(jù)庫(kù)讀寫頻繁、壓力大等原因,我們通常會(huì)使用緩存來(lái)減少數(shù)據(jù)庫(kù)的訪問(wèn)次數(shù),提高系統(tǒng)的性能。而Redis作為一個(gè)高性能的內(nèi)存數(shù)據(jù)庫(kù),成為了緩存的首選方案之一。但是,緩存和數(shù)據(jù)庫(kù)之間存在數(shù)據(jù)一致性的問(wèn)題,如何解決這個(gè)問(wèn)題呢?本文將

    2023年04月19日
    瀏覽(27)
  • 【redis】緩存雙寫一致性之工程落地實(shí)現(xiàn)(下)

    【redis】緩存雙寫一致性之工程落地實(shí)現(xiàn)(下)

    提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 如何監(jiān)聽(tīng)MySQL的變動(dòng)? MySQL有一個(gè)binlog日志 偽裝成從機(jī),從主機(jī)獲取二進(jìn)制文件 配置不在詳述 配置不再詳述 a、業(yè)務(wù)類: 當(dāng)MySQL進(jìn)行增刪改操作時(shí),后臺(tái)的canal會(huì)立刻監(jiān)聽(tīng)捕捉到MySQL的二進(jìn)制binlog日志文件改動(dòng),并通過(guò)Jav

    2023年04月19日
    瀏覽(22)
  • 博客摘錄「 Redis( 緩存篇 ==> 超詳細(xì)的緩存介紹與數(shù)據(jù)一致性解決方案 &; 代碼實(shí)現(xiàn)」

    Redis 旁路緩存 由于高并發(fā)原因,先更新數(shù)據(jù)庫(kù)和先更新緩存策略都會(huì)因?yàn)檠舆t時(shí)間而導(dǎo)致數(shù)據(jù)不一致問(wèn)題。 兩種策略 先刪除緩存,再更新數(shù)據(jù)庫(kù); 先更新數(shù)據(jù)庫(kù),再刪除緩存。 因?yàn)榫彺娴膶懭胪ǔRh(yuǎn)遠(yuǎn)快于數(shù)據(jù)庫(kù)的寫入 ,所以先更新數(shù)據(jù)庫(kù)再刪緩存,刪完緩存,下次訪

    2024年02月15日
    瀏覽(31)
  • 【Redis】緩存一致性

    【Redis】緩存一致性

    讀緩存 雙檢加鎖 策略 采用 雙檢加鎖 策略 多個(gè)線程同時(shí)去查詢數(shù)據(jù)庫(kù)的這條數(shù)據(jù),那么我們可以在第一個(gè)查詢數(shù)據(jù)的請(qǐng)求上使用一個(gè) 互斥鎖來(lái)鎖住它。 其他的線程走到這一步拿不到鎖就等著,等第一個(gè)線程查詢到了數(shù)據(jù),然后做緩存。 后面的線程進(jìn)來(lái)發(fā)現(xiàn)已經(jīng)有緩存了,

    2023年04月24日
    瀏覽(23)
  • Redis之緩存一致性

    Redis之緩存一致性

    按照緩存更新的方式大致分為: 內(nèi)存淘汰、過(guò)期刪除、主動(dòng)更新。 利用 Redis 的內(nèi)存淘汰策略,當(dāng)內(nèi)存不足時(shí)自動(dòng)進(jìn)行淘汰部分?jǐn)?shù)據(jù),下次查詢時(shí)更新緩存,一致性差,無(wú)維護(hù)成本。 因?yàn)?Redis 是基于內(nèi)存的,如果內(nèi)存超過(guò)限定值( Redis 配置文件的 maxmemory 參數(shù)決定 Redis 最大內(nèi)

    2024年02月07日
    瀏覽(29)
  • Redis 原理緩存過(guò)期、一致性hash、雪崩、穿透、并發(fā)、布隆、緩存更新策略、緩存數(shù)據(jù)庫(kù)一致性

    Redis 原理緩存過(guò)期、一致性hash、雪崩、穿透、并發(fā)、布隆、緩存更新策略、緩存數(shù)據(jù)庫(kù)一致性

    redis的過(guò)期策略可以通過(guò)配置文件進(jìn)行配置 redis會(huì)把設(shè)置了過(guò)期時(shí)間的key放在單獨(dú)的字典中,定時(shí)遍歷來(lái)刪除到期的key。 1).每100ms從過(guò)期字典中 隨機(jī)挑選20個(gè),把其中過(guò)期的key刪除; 2).如果過(guò)期的key占比超過(guò)1/4,重復(fù)步驟1 為了保證不會(huì)循環(huán)過(guò)度,導(dǎo)致卡頓,掃描時(shí)間上限

    2024年02月08日
    瀏覽(31)
  • 【Redis】之?dāng)?shù)說(shuō)緩存一致性

    【Redis】之?dāng)?shù)說(shuō)緩存一致性

    對(duì)于使用 Redis 作為緩存來(lái)說(shuō),如何保證數(shù)據(jù)庫(kù)和緩存數(shù)據(jù)一致性是個(gè)麻煩的問(wèn)題。對(duì)于緩存和數(shù)據(jù)庫(kù)的操作,主要有以下兩種方式: 先刪緩存,再更新數(shù)據(jù)庫(kù); 先更新數(shù)據(jù)庫(kù),再刪除緩存; 這兩種方式都存在緩存一致性問(wèn)題,下面我們就分析一下如何解決這兩種方式的緩存

    2024年02月13日
    瀏覽(21)
  • Redis緩存雙寫一致性

    Redis緩存雙寫一致性

    如果redis中有數(shù)據(jù):需要和數(shù)據(jù)庫(kù)中的值相同 如果redis中無(wú)數(shù)據(jù):數(shù)據(jù)庫(kù)中的值要是最新值,且準(zhǔn)備回寫redis 緩存按照操作來(lái)分,可細(xì)分為兩種: 只讀緩存和讀寫緩存 只讀緩存很簡(jiǎn)單:就是Redis只做查詢,有就是有,沒(méi)有就是沒(méi)有,不會(huì)再進(jìn)一步訪問(wèn)MySQL,不再需要會(huì)寫機(jī)制

    2023年04月17日
    瀏覽(18)
  • Redis緩存(雙寫一致性問(wèn)題)

    Redis緩存(雙寫一致性問(wèn)題)

    前言 : 什么是緩存? 緩存就像自行車,越野車的避震器 舉個(gè)例子:越野車,山地自行車,都擁有\(zhòng)\\"避震器\\\", 防止 車體加速后因慣性,在酷似\\\"U\\\"字母的地形上飛躍,硬著陸導(dǎo)致的 損害 ,像個(gè)彈簧一樣; 同樣,實(shí)際開(kāi)發(fā)中,系統(tǒng)也需要\\\"避震器\\\",防止過(guò)高的數(shù)據(jù)訪問(wèn)猛沖系統(tǒng),導(dǎo)致其操作線程無(wú)法

    2024年02月02日
    瀏覽(22)
  • Redis---緩存雙寫一致性

    Redis---緩存雙寫一致性

    目錄 一、什么是緩存雙寫一致性呢? ?1.1 雙檢加鎖機(jī)制 ?二、數(shù)據(jù)庫(kù)和緩存一致性的更新策略 2.1、先更新數(shù)據(jù)庫(kù),后更新緩存 ?2.2 、先更新緩存,后更新數(shù)據(jù)庫(kù) ?2.3、先刪除緩存,在更新數(shù)據(jù)庫(kù) 延時(shí)雙刪的策略: ?2.4.先更新數(shù)據(jù)庫(kù),在刪除緩存(常用) 2.5、實(shí)際中是不可

    2024年02月15日
    瀏覽(26)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包