溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL和Redis 怎么實現數據同步

發布時間:2020-09-23 09:31:21 來源:億速云 閱讀:405 作者:Leah 欄目:編程語言

本篇文章給大家分享的是有關MySQLRedis 怎么實現數據同步,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

MySQL和Redis 數據同步解決方案總結

現在在中集E棧工作,最近在做一個Redis箱格信息數據同步到數據庫Mysql的功能。

自己想了想,也有大概方案。

1、隊列同步,變跟數據2份,使用消息隊列,一份給Redis消費,一份給Mysql消費。

2、后臺定時任務,定時刷新Redis中箱格信息到數據庫。

網上也到處找了下解決方案,發現這么個問題,居然是天下一大抄,還抄的一字不差,我也抄吧。

方案一:

讀: 讀redis->沒有,讀mysql->把mysql數據寫回redis

寫: 寫mysql->成功,寫redis。

就是讀的話,先讀Redis,Redis沒有再讀數據庫,將數據庫中的數據放入Redis。

寫(增刪改),先寫數據庫,然后寫Redis。

可以對此稍微優化,比如要求一致性高的數據,從數據庫讀,比如金融,交易數據。不要求強一致性的從Reids中讀取。

方案二:

基于binlog使用mysql_udf_redis,將數據庫中的數據同步到Redis。

方案三:

基于MQ,也就是最上面想到的方式1。

方案四:

官方有個memcached的udf插件,如果不是那么強烈非要redis的話,也可以考慮

如果是我選擇2,順便推薦發下大神的廣告:http://coolshell.cn/articles/17416.html

方案五:

用POSTGRESQL 替代 Mysql +Redis.

各種方案弊端

但是上面的方案都有各自的弊端。

方案一,明顯對于數據量巨大,更新頻繁的數據寫入無能為力。比如E棧終端的箱格,箱格數量巨大,每個箱格的變跟狀態又很頻繁,這樣很容易把數據庫寫掛。

方案二,是使用的mysql的User Defined Function功能,mysql_udf_redis是有人實現的同步數據到Redis的功能,弊端:需要學習成本,而來,第三方的插件不穩定。

方案三:怎么保證到數據庫和到Redis中的狀態一致性。就是假設一條修改數據,從隊列寫入到Mysql成功,但是寫入到Redis失敗,這種如何搞。還有就是需要一個消息隊列,使用第三方的比如Kafka,RabbitMq等來實現,管理起來不方便,系統整體穩定性不行,而且只是這么個比較小的箱格數據信息同步。有點殺雞用牛刀。

其他的方案:

訂閱key的變化進行數據庫更新,寫的時候寫2份,一份往Redis寫,一份是Redis數據的key網更新隊列(也可以直接Reids存)里寫,再寫個定時程序從更新隊列里取時間,根據key取出Redis數據到Mysql.

這個方案,其實和其他的不一樣,弊端了,就是占用內存大,因為需要維護一份更新隊列。

最后了,我上級是說用定時任務,刷Redis中的箱格狀態信息到數據庫。2W個終端,一個終端100個箱格,200W個箱格,首先是進行狀態比對,狀態不一致的放入集合,批量update數據庫。

其實也會有寫小問題,比如在比對的時候:

1、Redis中的箱格狀態變跟了,怎么辦?我們不可能在比對的時候鎖住Redis,200W次循環,這段時間完全可能發生狀態變跟。

2、在比對的時候,有人更新了數據庫,怎么辦?因為有些操作是可以直接更新數據庫的。比如更新箱格的layoutRow之類的信息。

以上就是MySQL和Redis 怎么實現數據同步,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女