redis訂閱發(fā)布缺點(diǎn) 怎么實(shí)現(xiàn)redis的數(shù)據(jù)庫(kù)的緩存?
怎么實(shí)現(xiàn)redis的數(shù)據(jù)庫(kù)的緩存?有兩種方法:腳本同步:1。編寫(xiě)自己的腳本,將數(shù)據(jù)庫(kù)數(shù)據(jù)寫(xiě)入redis/memcached。2這涉及到數(shù)據(jù)的實(shí)時(shí)變化問(wèn)題(MySQL行binlog的實(shí)時(shí)分析)、binl
怎么實(shí)現(xiàn)redis的數(shù)據(jù)庫(kù)的緩存?
有兩種方法:腳本同步:1。編寫(xiě)自己的腳本,將數(shù)據(jù)庫(kù)數(shù)據(jù)寫(xiě)入redis/memcached。2這涉及到數(shù)據(jù)的實(shí)時(shí)變化問(wèn)題(MySQL行binlog的實(shí)時(shí)分析)、binlog對(duì)阿里運(yùn)河的增量訂閱問(wèn)題、緩存層數(shù)據(jù)丟失/失敗后的數(shù)據(jù)同步恢復(fù)問(wèn)題。
2、業(yè)務(wù)層實(shí)現(xiàn):1。先讀取NoSQL緩存層,沒(méi)有數(shù)據(jù)時(shí)讀取MySQL層,然后將數(shù)據(jù)寫(xiě)入NoSQL。2NoSQL層做了大量的分布式節(jié)點(diǎn)(一致散列),以及節(jié)點(diǎn)失效后的替換方案(多層散列尋找相鄰的替換節(jié)點(diǎn)),以及數(shù)據(jù)沖擊恢復(fù)。
對(duì)于頻率變化非??斓臄?shù)據(jù),如果仍然選擇傳統(tǒng)的靜態(tài)緩存模式(內(nèi)存緩存、文件系統(tǒng)等)來(lái)顯示數(shù)據(jù),緩存訪問(wèn)可能會(huì)有很大的開(kāi)銷(xiāo),不能很好地滿足需要?;趦?nèi)存的NoSQL數(shù)據(jù)庫(kù)redis非常適合作為實(shí)時(shí)數(shù)據(jù)的容器。
但往往有數(shù)據(jù)可靠性的要求,使用MySQL作為數(shù)據(jù)存儲(chǔ),不會(huì)因?yàn)閮?nèi)存問(wèn)題而造成數(shù)據(jù)丟失,還可以利用關(guān)系數(shù)據(jù)庫(kù)的特點(diǎn)實(shí)現(xiàn)很多功能。因此,我們自然會(huì)考慮是否可以使用MySQL作為數(shù)據(jù)存儲(chǔ)引擎,使用redis作為緩存。
Mysql到redis的數(shù)據(jù)復(fù)制方案,不管是Mysql還是redis,都有自己的數(shù)據(jù)同步機(jī)制。更常見(jiàn)的MySQL主/從模式是通過(guò)分析從機(jī)端的主/從binlog來(lái)實(shí)現(xiàn)的。實(shí)際上,這種數(shù)據(jù)復(fù)制是一個(gè)異步過(guò)程,只是當(dāng)服務(wù)器在同一個(gè)intranet中時(shí),異步延遲幾乎可以忽略。理論上,同樣的方法也可以用來(lái)分析MySQL binlog文件,并將數(shù)據(jù)插入redis。
因此,我們選擇了更低成本的開(kāi)發(fā)方式。我們首先使用成熟的MySQL自定義項(xiàng)將MySQL數(shù)據(jù)放入gearman,然后通過(guò)自己編寫(xiě)的PHP gearman worker將數(shù)據(jù)同步到redis。與binlog分析方法相比,該方法增加了大量的處理過(guò)程,但實(shí)現(xiàn)成本較低,易于操作。
oracle數(shù)據(jù)同步到redis實(shí)例?
Golang有siddontang/go MySQL用于抓取binlog。我們已經(jīng)在生產(chǎn)環(huán)境中使用它很長(zhǎng)時(shí)間了。我們?cè)谏a(chǎn)環(huán)境中使用的Java的Zendesk/Maxwell也非??煽?。如果要寫(xiě)redis/Memcache,可以先寫(xiě)到Kafka,然后啟動(dòng)多個(gè)用戶,如何實(shí)現(xiàn)redis與數(shù)據(jù)庫(kù)的同步?MySQL到redis的同步:解析MySQL binlog,然后同步??捎玫膸?kù)有:openreplicator(https://github.com/whitesock/open-replicator(2) 將redis數(shù)據(jù)同步到MySQL:(https://github.com/leonchen83/redis-replicator;)