目錄
1.整體架構
3.安裝環境
1.1?使用docket安裝redis
1.2 配置redis緩存鏈接:
1.3 使用redisTemplate實現
1.4 緩存注解優化
1.4.1 常用緩存注解簡紹
1.4.2 @EnableCaching注解的使用
1.4.3使用@Cacheable
1.4.4@CachePut注解的使用
1.4.5 優化
2.安裝Nginx
2.1 安裝OpenRest使用Nginx
2.2 Nginx實現動靜分離站點架構
2.2.1Nginx實現緩存
2.2.2 Cache_Purge代理緩存清理
3. 緩存一致性
3.1實現原理講解
3.1 Canal安裝
1.整體架構
三級緩存框架圖(redis,nginx,mysql)
在大并發場景下,通過引入緩存機制,減輕后端Tomcat服務的壓力,避免因請求過多導致Tomcat宕機,同時提高系統的整體響應速度和性能。優化流程如下:
-
請求到達Nginx?Nginx作為代理層,具有極強的抗壓能力,能夠承載大量的并發請求。
-
緩存策略實施
-
第一道緩存:Redis緩存
-
請求到達Nginx后,首先查詢Redis緩存。
-
如果Redis中存在緩存數據,則直接返回緩存數據給用戶,無需再進行后續處理。
-
-
第二道緩存:Nginx緩存
-
如果Redis中沒有緩存數據,則查詢Nginx自身的緩存。
-
如果Nginx緩存中有數據,也直接返回給用戶。
-
-
請求路由到Tomcat
-
如果Redis和Nginx緩存中都沒有數據,則將請求路由到后端的Tomcat服務。
-
-
-
Tomcat處理與緩存更新
-
Tomcat接收到請求后,從數據庫中加載數據。
-
加載完成后,將數據存入Redis緩存(以便后續請求可以直接從Redis獲取)。
-
同時,響應數據給用戶。
-
-
后續請求處理
-
當用戶再次發起相同查詢請求時,會優先查詢Redis緩存。
-
如果Redis緩存中存在數據,直接返回,避免再次訪問Tomcat。
-
如果Redis緩存失效或不存在,再按照上述流程查詢Nginx緩存或路由到Tomcat。
-
-
最終效果
-
通過Redis和Nginx的雙重緩存機制,大幅減少了后端Tomcat服務被調用的次數,降低了Tomcat的負載。
-
提高了系統的整體性能和響應速度,增強了系統的穩定性和可靠性。
-
關鍵點
-
緩存優先級:優先使用Redis緩存,因為Redis的性能更高,適合存儲熱點數據。Nginx緩存作為補充,用于進一步減輕后端壓力。
-
緩存更新:Tomcat加載數據后及時更新Redis緩存,確保緩存數據的時效性和準確性。
-
緩存失效策略:需要合理設置Redis和Nginx緩存的失效時間,以平衡緩存命中率和數據新鮮度。
上面這套緩存架構被多個大廠應用,除了可以有效提高加載速度、降低后端服務負載之外,還可以防止緩存雪崩,為服務穩定健康打下了堅實的基礎,這也就是鼎鼎有名的多級緩存架構體系。
現在來思考以下問題:
1.如何實現多級緩存?
2.如何優化redis緩存?
3.nginx如何讀取緩存的數據?
4.redis如何和數據庫保持同步?
3.安裝環境
1.1?使用docket安裝redis
docker直接拉取rides
[root@localhost ~]# docker pull redis:7.0.5
配置容器以及說明
docker run -p 6379:6379 --name redis --restart=always \-v /usr/local/redis/redis.conf:/etc/redis/redis.conf \-v /usr/local/redis/data:/data \-d redis:7.0.5 redis-server /etc/redis/redis.conf \--appendonly yes --requirepass 123456參數說明:-restart=always 總是開機啟動-p 宿主機端口和容器端口映射-v 掛載數據卷-d 后臺啟動redis- -appendonly yes 開啟持久化--requirepass 123456 設置密碼
查看是否啟動成功
[root@localhost ~]# docker ps
1.2 配置redis緩存鏈接:
修改bootstrap.yml,增加配置Redis緩存鏈接,如下:
# Redis配置redis:host: 192.168.31.135 #換成自己虛擬機的ipport: 6379password:123456
1.3 使用redisTemplate實現
引入 RedisTemplate 來進行緩存的讀取和寫入操作,將確保在查詢數據庫之前先嘗試從 Redis 中獲取數據,并在獲取到數據庫結果后將其存儲到 Redis 中。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;@Service
public class SkuService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;@Autowiredprivate AdItemsMapper adItemsMapper;@Autowiredprivate SkuMapper skuMapper;private static final String CACHE_NAME = "ad-items-skus";// 方法參數類型應與緩存鍵的類型一致,這里假設id是String類型的,如果不是,請調整public List<Sku> typeSkuItems(String id) {// 嘗試從Redis中獲取緩存數據List<Sku> skus = (List<Sku>) redisTemplate.opsForValue().get(CACHE_NAME + ":" + id);if (skus == null) {System.out.println("查詢數據庫!!!");// 如果Redis中沒有緩存的數據,則查詢數據庫QueryWrapper<AdItems> adItemsQueryWrapper = new QueryWrapper<AdItems>();adItemsQueryWrapper.eq("type", Integer.parseInt(id));List<AdItems> adItems = this.adItemsMapper.selectList(adItemsQueryWrapper);// 獲取所有SkuIdList<String> skuIds = adItems.stream().map(adItem -> adItem.getSkuId()).collect(Collectors.toList());// 批量查詢Skuskus = skuMapper.selectBatchIds(skuIds);// 將查詢結果存入Redis,并設置過期時間(例如1小時)//redisTemplate.opsForValue().set(CACHE_NAME + ":" + id, skus, 1, TimeUnit.HOURS);// 設置永不過期redisTemplate.opsForValue().set(CACHE_NAME + ":" + id, skus);}return skus;}
}
思考:
redisTemplate雖然可以實現,但是代碼耦合性高,如何簡化并實現相同效果??
1.4 緩存注解優化
1.4.1 常用緩存注解簡紹
@EnableCaching: 開關性注解,在項目啟動類或某個配置類上使用此注解后,則表示允許使用注解的方式進行緩存操作。
@Cacheable: 會判斷緩存是否存在,可用于類或方法上;在目標方法執行前,會根據key先去緩存中查詢看是否有數據,有就直接返回緩存中的key對應的value值。不再執行目標方法;無則執行目標方法,并將方法的返回值作為value,并以鍵值對的形式存入緩存。
@CacheEvict: 刪除緩存,可用于類或方法上;在執行完目標方法后,清除緩存中對應key的數據(如果緩存中有對應key的數據緩存的話)。
@CachePut: 不會判斷緩存是否存在,可用于類或方法上;在執行完目標方法后,并將方法的返回值作為value,并以鍵值對的形式存入緩存中。
@Caching: 三合一,此注解即可作為@Cacheable、@CacheEvict、@CachePut三種注解中的的任何一種或幾種來使用。
@CacheConfig: 可以用于配置@Cacheable、@CacheEvict、@CachePut這三個注解的一些公共屬性,例如cacheNames、keyGenerator。
1.4.2 @EnableCaching注解的使用
1.4.3使用@Cacheable
?測試
第一次查詢:
第二次測試:
使用緩存注解存儲數據到redis緩存中,key的過期時間是多久呢?
答案是:-1??永不過期!
注意:
對應的實體類要進行序列化 implements Serializeable,否則會報錯!
實體類序列化:
1.4.4@CachePut注解的使用
測試:
?
第一次
觀察控制臺,會發現它是查了數據庫
redis中也存了緩存
第二次
觀察控制臺,會發現它仍然是查了數據庫
redis中也存了緩存
第三次
觀察控制臺,會發現它還是走數據庫查詢
redis中也存了緩存
經過連續測試三次,會發現 CachePut 注解,就是將數據放進redis緩存中,并不存在判斷緩存操作!!!
1.4.5 優化
2.安裝Nginx
多級緩存架構圖思路:
首先用戶請求先進入到Nginx ,Nginx攔截后,先找redis是否有緩存,如果redis 有數據,就直接響應給用戶。如果redis緩存無數據,就會去查詢nginx緩存數據。
2.1 安裝OpenRest使用Nginx
???OpenResty 是一個基于 Nginx 與 Lua 的高性能 Web 平臺,其內部集成了大量精良的 Lua 庫、第三方模塊以及大多數的依賴項。用于方便地搭建能夠處理超高并發、擴展性極高的動態 Web 應用、Web 服務和動態網關。OpenResty? 通過匯聚各種設計精良的 Nginx 模塊(主要由 OpenResty 團隊自主開發),從而將 Nginx 有效地變成一個強大的通用 Web 應用平臺。這樣,Web 開發人員和系統工程師可以使用 Lua 腳本語言調動 Nginx 支持的各種 C 以及 Lua 模塊,快速構造出足以勝任 10K 乃至 1000K 以上單機并發連接的高性能 Web 應用系統。OpenResty? 的目標是讓你的Web服務直接跑在 Nginx 服務內部,充分利用 Nginx 的非阻塞 I/O 模型,不僅僅對 HTTP 客戶端請求,甚至于對遠程后端諸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都進行一致的高性能響應。
Nginx并發能力強 、穩定、消耗資源小
Lua:所有腳本語言中最強的
安裝
進行安裝包:
?
#進入安裝包
cd openresty-1.11.2.5#安裝
?[root@localhost openresty-1.11.2.5]# ./configure --prefix=/usr/local/openresty --with-luajit --without-http_redis2_module --with-http_stub_status_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --add-module=/usr/local/openrestyDir/ngx_cache_purge-2.3/
參數說明:
?
--prefix=/usr/local/openresty:安裝路徑
?
--with-luajit:安裝luajit相關庫,luajit是lua的一個高效版,LuaJIT的運行速度比標準Lua快數十倍。
?
--without-http_redis2_module:現在使用的Redis都是3.x以上版本,這里不推薦使用Redis2,表示不安裝redis2支持的lua庫
?
--with-http_stub_status_module:Http對應狀態的庫
?
--with-http_v2_module:對Http2的支持
?
--with-http_gzip_static_module:gzip服務端壓縮支持
?
--with-http_sub_module:過濾器,可以通過將一個指定的字符串替換為另一個字符串來修改響應
?
--add-module=/usr/local/openrestyDir/ngx_cache_purge-2.3/:Nginx代理緩存清理工具
會報錯:
解決方案,安裝Nginx代理緩存工具:
mkdir -p /usr/local/openrestyDir cd /usr/local/openrestyDir wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gztar -xvf ngx_cache_purge-2.3.tar.gz
再次安裝:
?
?[root@localhost openresty-1.11.2.5]# ./configure --prefix=/usr/local/openresty --with-luajit --without-http_redis2_module --with-http_stub_status_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --add-module=/usr/local/openrestyDir/ngx_cache_purge-2.3/
報錯解決:
測試訪問:
[root@localhost openresty-1.11.2.5]# cd /usr/local/openresty
[root@localhost openresty]# ll
總用量 240
drwxr-xr-x. 2 root root 123 8月 7 19:32 bin
-rw-r--r--. 1 root root 22924 8月 7 19:32 COPYRIGHT
drwxr-xr-x. 6 root root 56 8月 7 19:32 luajit
drwxr-xr-x. 6 root root 70 8月 7 19:32 lualib
drwxr-xr-x. 6 root root 54 8月 7 19:32 nginx
drwxr-xr-x. 43 root root 4096 8月 7 19:32 pod
-rw-r--r--. 1 root root 216208 8月 7 19:32 resty.index
drwxr-xr-x. 5 root root 47 8月 7 19:32 site
瀏覽器地址欄訪問: http://192.168.31.134:80?
注意: 檢查自己linux服務器的 80 端口是否被放開?
或者 直接關閉了防火墻 也可以 !
2.2 Nginx實現動靜分離站點架構
我們打開京東商城,搜索手機,查看網絡可以發現響應頁面后,頁面又會發起很多請求,還沒有查看多少信息就已經有393個請求發出了,而多數都是圖片,一個人請求如此,人多了對后端造成的壓力是非比尋常的,該如何降低靜態資源對服務器的壓力呢?
項目完成后,項目上線如果所有請求都經過Tomcat,并發量很大的時候,對項目而言將是滅頂之災,電商項目中一個請求返回的頁面往往會再次發起很多請求,而絕大多數都是圖片或者是css樣式、js等靜態資源,如果這些靜態資源都去查詢Tomcat,Tomcat的壓力會增加數十倍甚至更高。
這時候我們需要采用動靜分離的策略:
1、所有靜態資源,經過Nginx,Nginx直接從指定磁盤中獲取文件,然后IO輸出給用戶
2、如果是需要查詢數據庫數據的請求,就路由到Tomcat集群中,讓Tomcat處理,并將結果響應給用戶
例如我的門戶代碼放到front上,將front上傳到/usr/local/shangpinmall/web/static目錄下,再修改/usr/local/openresty/nginx/conf/nginx.conf,配置如下:
#門戶發布
server {listen 80;server_name www.shangpinyungou.com;location / {root /usr/local/shangpinmall/web/static/frant;}
}
配置結束后一定要進行刷新:nginx -s reload
訪問 www.shangpinyungou.com 效果如下:
2.2.1Nginx實現緩存
1)開啟Proxy_Cache緩存:
我們需要在nginx.conf中配置才能開啟緩存:
proxy_cache_path /usr/local/openresty/nginx/cache levels=1:2 keys_zone=proxy_cache:10m max_size=1g inactive=60m use_temp_path=off;
參數說明:
【proxy_cache_path】指定緩存存儲的路徑,緩存存儲在/usr/local/openresty/nginx/cache目錄 【levels=1:2】設置一個兩級目錄層次結構存儲緩存,在單個目錄中包含大量文件會降低文件訪問速度,因此我們建議對大多數部署使用兩級目錄層次結構。 如果 levels 未包含該參數,Nginx 會將所有文件放在同一目錄中。 keys_zone 緩存空間的名字 叫做: proxy_cache key是 10M 【keys_zone=proxy_cache:10m】設置共享內存區域,用于存儲緩存鍵和元數據,例如使用計時器。擁有內存中的密鑰副本,Nginx 可以快速確定請求是否是一個 HIT 或 MISS 不必轉到磁盤,從而大大加快了檢查速度。1 MB 區域可以存儲大約 8,000 個密鑰的數據,因此示例中配置的 10 MB 區域可以存儲大約 80,000 個密鑰的數據。 max_size 緩存數據的大小 【max_size=1g】設置緩存大小的上限。它是可選的; 不指定值允許緩存增長以使用所有可用磁盤空間。當緩存大小達到限制時,一個稱為緩存管理器的進程將刪除最近最少使用的緩存,將大小恢復到限制之下的文件。 // 表達一個緩存多久沒去使用后,就會過期 【inactive=60m】指定項目在未被訪問的情況下可以保留在緩存中的時間長度。在此示例中,緩存管理器進程會自動從緩存中刪除 60 分鐘未請求的文件,無論其是否已過期。默認值為 10 分鐘(10m)。非活動內容與過期內容不同。Nginx 不會自動刪除緩存 header 定義為已過期內容(例如 Cache-Control:max-age=120)。過期(陳舊)內容僅在指定時間內未被訪問時被刪除。訪問過期內容時,Nginx 會從原始服務器刷新它并重置 inactive 計時器。 // 不使用臨時目錄 【use_temp_path=off】表示NGINX會將臨時文件保存在緩存數據的同一目錄中。這是為了避免在更新緩存時,磁盤之間互相復制響應數據,我們一般關閉該功能。
2)Proxy_Cache屬性:
proxy_cache:設置是否開啟對后端響應的緩存,如果開啟的話,參數值就是zone的名稱,比如:proxy_cache。proxy_cache_valid:針對不同的response code設定不同的緩存時間,如果不設置code,默認為200,301,302,也可以用any指定所有code。proxy_cache_min_uses:指定在多少次請求之后才緩存響應內容,這里表示將緩存內容寫入到磁盤。proxy_cache_lock:默認不開啟,開啟的話則每次只能有一個請求更新相同的緩存,其他請求要么等待緩存有數據要么限時等待鎖釋放;nginx 1.1.12才開始有。
配套著proxy_cache_lock_timeout一起使用。proxy_cache_key:緩存文件的唯一key,可以根據它實現對緩存文件的清理操作。
Nginx代理緩存熱點數據應用
1)開啟代理緩存
修改nginx.conf,添加如下配置:
proxy_cache_path /usr/local/openresty/nginx/cache levels=1:2 keys_zone=proxy_cache:10m max_size=1g inactive=60m use_temp_path=off;
修改nginx.conf,添加如下配置:
# lua 推廣產品操作location /sku/aditems/type {# 查找redis緩存#content_by_lua_file /usr/local/openresty/nginx/lua/aditem.lua;# 找nginx緩存rewrite_by_lua_file /usr/local/openresty/nginx/lua/aditem.lua;#啟用緩存openresty_cacheproxy_cache proxy_cache;#針對指定請求緩存#proxy_cache_methods GET;#設置指定請求會緩存proxy_cache_valid 200 304 60s;#最少請求1次才會緩存proxy_cache_min_uses 1;#如果并發請求,只有第1個請求會去服務器獲取數據#proxy_cache_lock on;#唯一的keyproxy_cache_key $host$uri$is_args$args;#動態代理 去找后端微服務 查數據 這里的地址是填寫你當前windows的ip地址服務器 (我們去看我們nacos中服務注冊的ip就可以了)proxy_pass http://192.168.18.1:8081;}# 門戶靜態頁location / {root /usr/local/web/frant;index index.html index.htm;}
重啟nginx或者重新加載配置文件nginx -s reload,再次測試
進行測試,關閉運行的代碼,只要不關閉虛擬機再次刷新我們發現數據仍然顯示出來,說明緩存起到作用
我們可以找一下nginx代理緩存的存儲位置
可以發現cache目錄下多了目錄和一個文件,這就是Nginx緩存:
可以發現下面個規律:
1:先查找Redis緩存
2:Redis緩存沒數據,直接找Nginx緩存
3:Nginx緩存沒數據,則找真實服務器
2.2.2 Cache_Purge代理緩存清理
很多時候我們如果不想等待緩存的過期,想要主動清除緩存,可以采用第三方的緩存清除模塊清除緩存 nginx_ngx_cache_purge。
安裝nginx的時候,需要添加purge模塊,purge模塊我們已經下載了,在 /usr/local/openrestyDir 目錄下,添加該模塊 --add-module=/usr/local/openrestyDir/ngx_cache_purge-2.3/,這一個步驟我們在安裝OpenRestry的時候已經實現了。
在實際部署中,你需要確保Nginx已經安裝并啟用了Purge模塊。你可以通過運行nginx -V來檢查是否已經啟用了--with-http_purge_module
#清理緩存
location ~ /purge(/.*) {#清理緩存 匹配 http://192.168.31.136/sku/aditems/type?id=1proxy_cache_purge proxy_cache $host$1$is_args$args;
}1$ 表示第一個路徑 /purge 后面的路徑匹配 (/sku/aditems/type,不包含/purge自己) http://192.168.25.136/sku/aditems/type?id=1
此時訪問 http://192.168.31.136/purge/sku/aditems/type?id=1,表示清除緩存,如果出現如下效果表示清理成功:
怎么確定,nginx代理緩存被清除了呢?
我們可以再次去看nginx代理數據對象數據,還是否存在
3. 緩存一致性
3.1實現原理講解
上面我們雖然實現了多級緩存架構但是問題也出現了,如果數據庫中數據發生變更,如何更新Redis緩存呢?如何更新Nginx緩存呢?我們可以使用阿里巴巴的技術解決方案Canal來實現,通過Canal監聽數據庫變更,并實時消費變更數據,并更新緩存。
- MySQL master 將數據變更寫入二進制日志( binary log, 其中記錄叫做二進制日志事件binary log events,可以通過 show binlog events 進行查看)
- MySQL slave 將 master 的 binary log events 拷貝到它的中繼日志(relay log)
- MySQL slave 重放 relay log 中事件,將數據變更反映它自己的數據

- canal 模擬 MySQL slave 的交互協議,偽裝自己為 MySQL slave ,向 MySQL master 發送dump 協議
- MySQL master 收到 dump 請求,開始推送 binary log 給 slave (即 canal )
- canal 解析 binary log 對象(原始為 byte 流)
- 再發送到存儲目的地,比如MySQL,Kafka,ElasticSearch等等。



?canal的好處在于對業務代碼沒有侵入,因為是基于監聽binlog日志去進行同步數據的。而且能做到同步數據的實時性,是一種比較好的數據同步方案。
????以上只是canal的原理和入門,實際項目并不是這樣玩的,在實際項目中我們是配置MQ模式,配合RabbitMQ或者Kafka,canal會把數據發送到MQ中的topic,然后通過消息隊列的消費者進行處理。
3.1 Canal安裝
MySQL開啟binlog
對于MySQL , 需要先開啟 Binlog 寫入功能,配置 binlog-format 為 ROW 模式,my.cnf 中配置如下:
docker exec -it mysql /bin/bash
cd /etc/mysql/
vim mysqld.cnf
[mysqld]
# 修改容器中的MySQL時間不同步的問題
default_time_zone='+8:00'
# 修改容器中的MySQL分組only_full_group_by問題
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
#修改表名不區分大小寫問題
lower_case_table_names=1
# 設置服務器的排序規則為 utf8_general _ci
collation-server=utf8_general_ci
#設置服務器的默認字符集為 utf8
character-set-server=utf8# 開啟 binlog
log-bin=mysql-bin
# 選擇 ROW 模式
binlog-format=ROW
# 配置 MySQL replaction 需要定義,不要和 canal 的 slaveId 重復
server_id=1 [client]
# 設置客戶端的默認字符集為 utf8
default-character-set=utf8
注:docker默認沒有vim工具,可以在數據卷下進行操作,也可以安裝工具
授權canal
權 canal 鏈接 MySQL 賬號具有作為 MySQL slave 的權限, 如果已有賬戶可直接 grant:
先進入到 docker 中mysql 容器內部
docker exec -it mysql mysql -uroot -p
CREATE USER canal IDENTIFIED BY 'canal';GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;
重新啟動MySQL即可
Canal安裝
linux硬盤空間不夠的排查與清理
linux硬盤空間不夠的排查與清理_linux清理磁盤空間-CSDN博客
我們采用docker安裝方式:
[root@localhost ~]# docker pull canal/canal-server:v1.1.7
docker安裝canal: docker環境下Canal的安裝使用_docker 安裝canal-CSDN博客
# 提前創建 /usr/local/docker/canal/conf 目錄,接著來執行拷貝配置文件命令
docker cp canal:/home/admin/canal-server/conf/example/instance.properties /usr/local/docker/canal/conf
docker cp canal:/home/admin/canal-server/conf/canal.properties /usr/local/docker/canal/conf# 刪除原先的canal服務
docker rm -f canaldocker run --name canal \
-p 11111:11111 \
--restart=always \
-v /usr/local/docker/canal/conf/instance.properties:/home/admin/canal-server/conf/example/instance.properties \
-v /usr/local/docker/canal/conf/canal.properties:/home/admin/canal-server/conf/canal.properties \
-d canal/canal-server:v1.1.7
[root@localhost ~]# docker exec -it canal /bin/bash[root@6adf5de6d4df admin]# lsapp.sh bin canal-server health.sh node_exporter node_exporter-1.6.1.linux-amd64[root@6adf5de6d4df admin]# cd canal-server/
[root@6adf5de6d4df canal-server]# ls
bin conf lib logs plugin[root@6adf5de6d4df canal-server]# cd conf/
[root@6adf5de6d4df conf]# ls
canal.properties canal_local.properties example logback.xml metrics spring
進入 example
[root@6adf5de6d4df conf]# cd example/
[root@6adf5de6d4df example]# ls
h2.mv.db instance.properties
入容器,修改核心配置canal.properties 和instance.properties,canal.properties 是canal自身的配置,instance.properties是需要同步數據的數據庫連接配置。
[root@localhost conf]# ls
canal.properties instance.properties
[root@localhost conf]#
[root@localhost conf]# vim canal.properties
[root@6adf5de6d4df example]# vim instance.properties
修改配置如下:
# position info canal.instance.master.address=192.168.25.136:3306
另一處配置:
找到 canal.instance.filter.regex 這里 進行修改
注:
# table regex #canal.instance.filter.regex=.*\\..* 任意數據庫的任意表 #監聽配置 canal.instance.filter.regex=shop_goods.ad_items
配置完畢重啟即可!
bootstrap.yml:
server:port: 8083
spring:application:name: mall-canal-servicecloud:nacos:config:file-extension: yaml# nacos 配置中心地址server-addr: 192.168.254.131:8848discovery:#Nacos的注冊地址server-addr: 192.168.254.131:8848
#Canal配置
canal:server: 192.168.254.131:11111 # canal的服務器ipdestination: example # canal 中配置的實例目錄
#日志配置
logging:pattern:console: "%msg%n"level:root: error
以上就是本期的分享啦,希望能夠幫到你