請教redis如何做到和mysql資料庫的同步呢?
02-05
請教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)
&
&
&redis-replicator&
&
&
這是一個好問題,但發生的概率很低。樓主性別經常變嗎?呵呵。
個人建議靠譜的設計應該是: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 |