2013-11-24 112 views
1

我有一個mysql數據庫,裏面有數百萬條記錄。我想使用Redis來提高性能。我已經閱讀了關於Redis和它的一些命令。
但我不明白redis的工作原理。我的意思是,據我所知,我可以使用Redis來緩存MySQL數據。但是Redis將如何知道自上次緩存時間以來的新記錄。 (我認爲Redis也會從mysql中獲取數據以緩存它們 - 所以它是從mysql中選擇的)Redis的基本讀寫概念

foreach在mysql中插入,redis也應該更新,我無法弄清楚選擇之間有什麼區別從MySQL直接,而Redis也從MySQL選擇更新自己。 (我不知道Redis是如何工作的,但我認爲它是這樣工作的)

有人可以解釋Redis緩存的工作原理嗎?

+3

你誤會了Redis。 Redis和MySQL之間沒有關係。如果您的應用程序可以幫助處理Redis的內存限制,那麼您的應用程序可以選擇在其中存儲一些數據,但這是您應用程序的功能,而不是Redis的一項功能。 – 2013-11-24 08:58:16

回答

3

您的應用程序代碼將不得不更新Redis以及MySQL。你可以通過調用SET來通過字符串鍵來存儲新數據。然後您使用GET命令獲取相同的數據。

您可以將Redis看作是一個緩​​存,但它的真正好處在於它的數據結構允許您實質上修改緩存實時。這些適用於簡單的列表/集合。利用Redis的Webscale系統經常使用Redis作爲其面向網絡的應用程序代碼將調用的唯一系統。 MySQL和其他RDMBS僅用於報告數據或歷史歸檔。

2

在你的情況下,它更好地考慮由Mysql數據庫支持的Memcached。 http://dev.mysql.com/doc/refman/5.0/en/ha-memcached.html

但請注意,Redis和Memcached只適用於鍵值檢索/存儲。

+0

所以memcache也會緩存數據,假設它緩存了一個用戶的朋友,並且在它一分鐘後,更新會更改該用戶的朋友列表。那麼memcached如何知道是否有新的數據? memcached將返回它自己的緩存好友列表。它是如何知道的,在MySQL中有一個更新?例如: – Pars

+0

:用於像Facebook這樣的網站。它的數據庫將每隔一毫秒更新一次!所以memcached應​​該獲取每一個毫秒更新!我無法得到它...... – Pars

+0

如果你想使用mysql的緩存,那麼你必須承擔「最終一致性」和數據到期。您可以自定義緩存機制以每X秒刷新一次數據。其他選項反之亦然,在Redis中讀取和寫入數據,但啓用持久性日誌..並每隔X秒與mysql數據庫同步。 – user3020494

2

一種選擇是所謂的直寫式緩存。在這種情況下,應用程序會同時使用相同的寫入數據更新Redis和Mysql,因此無論顯示的數據來自何處(Redis/Mysql更新Redis),數據總是等同的。