標籤:

請教redis如何做到和mysql資料庫的同步呢?

請教redis如何做到和mysql資料庫的同步呢?比如某用戶修改自己的性別後,是不是flushdb或者flushall之後,再讓程序去整個的寫一次緩存呢?


謝邀, redis和mysql數據的同步,代碼級別大致可以這樣做:

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

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


捕捉所有mysql的修改,寫入和刪除事件,對redis進行操作


使用mysql的udf,詳情請看MySQL :: MySQL 5.1 Reference Manual :: 22.3 Adding New Functions to MySQL 然後通過trigger在表update和insert之後進行函數的調用,寫入到redis中去。大致是這個樣子。


看了很多答案,都是關於讀的方案。

這時候如果用到了先redis寫,然後再同步到MYSQL就沒人說了,我想要知道的是這方面的,可惜沒有。


使用redis作為mysql的二級緩存即可,實現org.apache.ibatis.cache.Cache介面寫個MybatisRedisCache這樣的類。修改mysql數據後,可以直接刷新redis緩存數據。


兩種同步,第一種是mysql 同步到redis,可以解析mysql的binlog

可以使用的庫有[open-replicator](GitHub - whitesock/open-replicator: Open Replicator is a high performance MySQL binlog parser written in Java. It unfolds the possibilities that you can parse, filter and broadcast the binlog events in a real time manner.)

如果想同步redis數據到mysql,可以使用我寫的庫

[redis-replicator](leonchen83/redis-replicator)

&
&com.moilioncircle&
&redis-replicator&
&2.4.6&
&


這是一個好問題,但發生的概率很低。樓主性別經常變嗎?呵呵。

個人建議靠譜的設計應該是:

1. 讀從redis, 沒有就到db查。redis設數據超時時間,db數據更新只能准實時。實時要求高的數據超時時間設短點就行了。超時失效可以用消極方法或積極方法,具體自己搜。

2. 寫直接寫db. 不然要考慮很多問題和情況。


mysql binlog這個就去好一點,我使用mybatis攔截器時,當有人直接在mysql修改數據時,一致性就無法保證了。


實時獲取mysql binlog進行解析,然後修改redis


捕捉所有mysql的修改,寫入和刪除事件,對redis進行操作


有沒有直接配置讓她們自動同步,而且不需要寫代碼的啊?


可解析mysql的binlog,根據binlog的內容依次刷新redis。


好多觸發,感覺也挺麻煩。可以直接自己寫一些定時處理。


程序實現mysql更新、添加、刪除就刪除redis數據。

程序查詢redis,不存在就查詢mysql並保存redis


我只是來查查redis和mysql如何同步的。但是我看到題主說當用戶改變性別的時候,我還是忍不住回答一下


推薦閱讀:

redis是個單線程的程序,為什麼會這麼快呢?每秒10000?這個有點不解,具體是快在哪裡呢?EPOLL?內存?
15位阿里Redis、MongoDB、HBase大咖直播分享,全方位解析資料庫技術!
Redis 哈希槽的概念,到底是什麼?是一個表的表名就會佔用一個哈希槽?
隊列是什麼意思?
R語言操作redis資料庫詳解

TAG:Redis |