1. 程式人生 > >用Redis快取來提升資料庫查詢效能

用Redis快取來提升資料庫查詢效能

對一個關係型資料庫進行調優以獲得高查詢效能可能會比較困難。如果對資料模型優化和對查詢調優不起作用,DBA就可以使用快取系統,比如Redis,它是一個可以提供記憶體和永久資料儲存的鍵值資料儲存系統。

由於Redis能夠將資料快速讀寫至資料儲存系統,比起關係型資料庫它更具效能優勢。但是鍵值資料儲存比較簡單,它們沒有類似SQL那樣的查詢語言或是結構化資料模型。取而代之的是,它們包含用鍵作為識別符號並與值相關聯的一個簡單字典或是雜湊模型。DBA可以通過這些鍵來儲存和檢索值。

鍵值儲存簡單而又快速,這使得它們可以很好地匹配關係型資料庫豐富的資料模型和查詢功能。有時使用鍵值和關係型資料庫的組合是更好的選擇。另外,還有大量支援商業化的鍵值資料庫,包括Redis,Riak和Areospike。

要執行Redis快取來優化常用查詢的效能,首先要對你想要快取的查詢結果進行識別。將注意力集中在那些最頻繁使用和耗時的查詢上,然後從你要快取的查詢中識別資料。簡言之,就是快取一個查詢返回的所有欄位值。

為鍵值定義一個命名規範;鍵應該用記錄的主鍵和欄位名的組合來構造。例如,產品說明的主鍵ID為198278,就可以將它儲存為鍵'198278:descr'。要使你的命名規範簡單並且是規則驅動的,這樣就能讓程式設計鍵的建立產生最小的程式碼量。

接下來,決定是否要將Redis快取以自管理服務加以執行或是執行Amazon ElastiCache。執行你自己的Redis例項可以讓DBA完全控制快取。而且這樣的控制意味著具有靈活性,例如在有額外空間的地方可以使用已有的Reserved Instances(保留例項)。

另外,當你想要將應用程式在雲提供商之間進行遷移時,擁有完全的管理控制權限是非常有用的。如果你選擇執行自管理Redis例項,就要下載伺服器。Redis客戶端支援超過30種程式語言——包括Java、Python、Prolog和Smalltalk等等。

那些已經使用AWS環境的公司可能會更青睞ElastiCache。除了有諸如可管理補丁這樣的優勢,Amazon ElastiCache還支援經過快取優化結點型別的一個列表,包括從中型到2x大型的m3結點,還有從大型到8x大型的r3結點,以及從微型到中型的t2結點。ElastiCache還支援某些以前的結點型別,例如m1,m2,t1以及c1結點。

ElastiCache還支援多重可用區域。如果一個結點出現故障,那麼一個讀副本結點就會取代故障結點。任何DNS的改變都需要讓應用程式的執行自動完成並且還要建立一個新的讀副本。ElastiCache允許基於每小時結點使用情況的按需定價模型,以及之前為期一年或三年的結點型別。在這裡可以看到完整的定價列表。

如果你通過Amazon ElastiCache來使用Redis,你可以從AWS Management Console(AWS管理控制檯)啟動一個叢集。除了要建立一個Redis服務,你還需要通過修改應用程式程式碼來使用快取。常用的模式是檢查快取中是否存在鍵並且是否不用執行SQL查詢來檢索資料然後將其儲存在快取中。當快取已滿時,你可以對Redis進行配置來刪除舊資料,因此你並不需要專門的程式碼來處理整個快取。