用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進行配置來刪除舊數據,因此你並不需要專門的代碼來處理整個緩存。

發佈了4 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章