2013-04-28 47 views
25

我需要使用php創建一個包含大量數據的mysql數據庫的解決方案。我的程序會有很多申請,我認爲如果我使用緩存和麪向對象的數據庫,我會有一個好的結果,但我沒有經驗。使用redis作爲mysql數據庫的緩存

例如,如果我將保存在mysql中的信息緩存在redis數據庫中,性能會提高,但我不知道這是否是一個好主意,所以我希望有人幫助我選擇。

對不起,如果我的英語不太好,我來自巴西。

+1

你問是不是想要緩存數據庫? – galdikas 2013-04-28 23:02:48

+1

yeah redis很好 – shapeshifter 2013-04-28 23:10:55

+0

我在前面使用redis自己,但是如果你已經使用'MySQL',你可能想要查看'MySQL's'' HEAP'表格 – NappingRabbit 2018-01-17 14:05:43

回答

44

是的,redis對此很有幫助。但要獲得這個要點,基本上有兩種緩存方法。根據您是否使用框架(和哪個),您可能有第一個選項可用於標準或使用插件:

  1. 緩存數據庫查詢,即 - 選定查詢及其結果將保存在redis中以便在給定時間內更快訪問或直到清除緩存(在更新數據庫之後有用)。在這種情況下,您可以使用內置的mysql查詢緩存,它將比使用其他鍵值存儲更簡單,或者您可以使用緩存(例如http://pythonhosted.org/johnny-cache/)覆蓋與您自己的類的默認數據庫集成。
  2. 自定義緩存,即創建您自己的結構以保存在緩存中,並定期或手動地使用從數據庫獲取的數據重新填充結構。它更靈活,可能更強大,因爲您可以使用內置的redis功能,如列表或排序集,這會使更新開銷變得更小。它需要更多的編碼,但通常會提供更好的結果,因爲它更加自定義。很好的例子是將頂級文章以redis ID列表的形式保存,然後通過redis訪問具有給定ID的序列化文章。你可以保留那篇文章的非標準化 - 即。序列化對象可以包含用戶標識以及用戶名,這樣可以將附加查詢的開銷降到最低。

這是你的決定採取哪種方法,我個人幾乎總是用第二種方法。但是,當然,一切都取決於你有多少時間以及應用程序應該做什麼 - 你最好還是從mysql查詢緩存開始,如果結果不夠好,則轉到redis和定製緩存。

+0

謝謝Krzysztof Bujniewicz – 2013-04-29 13:20:01

+0

謝謝Krzysztof Bujniewicz。我將使用第二個數據庫,數據庫mysql已經存在並且有很多數據,所以我將一個副本移動到redis,並且當用戶保存新數據時,程序將保存在mysql中,當用戶調用結果或報告程序將使用Redis的。你怎麼看待這件事?我將使用Yii框架。 http://www.yiiframework.com/ – 2013-04-29 13:26:57

+0

儘量不要複製數據庫1:1,而是放置序列化對象,對從mysql獲得的數據進行操作後,準備在應用程序中使用。很好的例子是將頂級文章以redis ID列表的形式保存,然後通過redis訪問具有給定ID的序列化文章。 – 2013-04-29 14:08:46