2012-08-17 89 views
4

我們有大量的購物和產品交易系統。我們在MySQL中遇到了很多問題,所以在我們計劃使用Redis之後,我們開始將Redis集成到我們的系統中。 在此之後,之前直接進入數據庫,現在我們已經搬進Redis的系統將Redis數據移動到MySQL的更快速的方法

  1. 用戶購物車的詳細信息
  2. 分支機構跟蹤點擊次數記錄
  3. 我們有產品處理用戶數據。
  4. 其他站點統計。

我不僅在Redis系統中存儲數據,我還寫了在每個時間間隔內將MySQL數據中的Redis數據移動的crons。這是我面臨的問題的主要觀點。 婁點我期待的解決方案

  1. 是他們的任何其他方式從Redis的大數據轉儲到MySQL?
  2. Redis使我們的存儲數據失敗,因此可以將數據直接存儲到MySQL數據庫中嗎?
  3. Redis是否有任何觸發系統使用,我可以避免隊列系統的克朗?

回答

11

是否有其他方式將大數據從Redis轉儲到MySQL?

Redis有可能(使用bgsave)以非阻塞和一致的方式生成數據轉儲。

https://github.com/sripathikrishnan/redis-rdb-tools

你可以使用Sripathi克里希南著名的包解析Python中的Redis的轉儲文件(RDB),和MySQL實例脫機填充。或者您可以將Redis轉儲轉換爲JSON格式,並使用任何您想要填充MySQL的語言編寫腳本。

如果您想將Redis實例的完整數據複製到MySQL中,此解決方案僅有趣。

Redis是否有任何可用於避免隊列系統的cron的觸發系統?

Redis沒有觸發器的概念,但沒有什麼能阻止你每次必須複製到MySQL時在Redis隊列中發佈事件。例如,而不是,:

# Add an item to a user shopping cart 
RPUSH user:<id>:cart <item> 

你可以執行:

# Add an item to a user shopping cart 
MULTI 
RPUSH user:<id>:cart <item> 
RPUSH cart_to_mysql <id>:<item> 
EXEC 

的MULTI/EXEC塊使得它的原子和一貫的。然後,您只需編寫一個守護進程,等待cart_to_mysql隊列的項目(使用BLPOP命令)。對於每個出隊的項目,守護進程必須從Redis獲取相關數據,並填充MySQL實例。

Redis使我們的存儲數據失敗,因此可以將數據直接存儲到MySQL數據庫嗎?

我不確定我是否理解這裏的問題。但是,如果您使用上述解決方案,則Redis更新與MySQL更新之間的延遲將非常有限。因此,如果Redis失敗,那麼只會丟失最後一次操作(與基於cron作業的解決方案相反)。當然,數據傳播中100%的一致性是不可能的。

+0

感謝4即時回覆。 redis-rdb-tools看起來不錯,讓我試試。 – 2012-08-18 06:27:57

相關問題