Redis入門:簡介
1、介紹
nginx+tomcat集羣可以實現10萬-百萬的併發訪問量;目前的架構不能承受如此海量的訪問,瓶頸還是在數據庫,尤其是查詢。要想突破數據庫的瓶頸,就需要使用緩存技術。
Redis是分佈式的、nosql、key-value、可持久化、內存緩存數據庫。
2、特點
2.1 分佈式
海量數據分片存儲。如下圖:
2.2 nosql
not only Structured query language.
不僅僅支持關係型數據——結構化數據(json);支持非關係型數據——非結構化。
Nosql有許多種,redis是其中的一個,它們分爲:
- 列存儲:Hbase、Cassandra
- 文檔存儲:MongoDB
- Key-value存儲:Berkeley DB、MemcacheDB、redis。其中redis最強。
- 圖存儲:Neo4j、Versant。這塊基本不用。
- Xml存儲:Berkeley DB xml、XBASE。Oracle很早已經支持這種存儲方式了。
結構化數據
mysql數據庫中的每個表格的每條數據記錄都是關係型、結構化數據。
例如:學生表格
no | name | age | gender |
---|---|---|---|
1 | 張三 | 35 | 男 |
非結構化數據
數據長度類型不固定。
例如:
《葵花寶典》: 欲練此功,必先自宮,若不自宮,也可成功,若已自宮,未必成功。
2.3 key-value
結構的特點:key自定義的值,value是原數據的切分片段。
key=”《葵花寶典》”;
value=” 欲練此功,必先自宮,若不自宮,也可成功,若已自宮,未必成功。”;
2.4 可持久化
針對內存存儲的重要特點;數據的恢復機制。
2.5 緩存數據庫
緩存數據庫可以添加的位置,可以在項目中的很多位置。
2.5.1 數據庫緩存
數據庫查詢執行的過程包括sql語句執行,組織查詢結構resultSet。
數據庫緩存根據sql可以創建緩存的key,緩存已經擁有了查詢過的resultSet,節省了前面的調度組織時間。
2.5.2 持久層緩存
減少從數據庫獲取結果和創建連接的資源消耗時間,節省了轉化成對象的過程。
2.5.3 業務層和控制層
減少調用的層次。
2.5.4 缺點
如果過多的使用redis或者其他緩存的技術,容易產生數據的冗餘導致內存或者磁盤存儲空間過大佔用。
3 緩存的作用
- 1.減少數據庫的訪問壓力。
- 2.減少網絡傳輸。
- 3.減少數據傳遞層次數。
redis的引入可以適當的添加在控制層和業務層。
4 主流的緩存架構技術
4.1 Ecache
很多數據庫的底層緩存都是使用ecache,併發量差。
4.2 memoryCache
曾經memoryCache市場佔有率90%以上長達10年,直到redis出現,這個局面被打破。
- 優點:速度,效率和redis不相上下。
- 缺點:不落地、沒有持久化過程,一旦緩存集羣出現數據丟失的過程(宕機、災難重啓),會出現雪崩/緩存擊穿(面試題)。
4.3 Redis
性能高,併發高,單實例,單線程,持久化可恢復數據能力強。
5 雪崩/緩存擊穿
當海量的數據訪問,請求併發,湧入集羣。需要高性能的處理過程,緩存的存在對於高併發的意義非常大。如果緩存失效,海量請求訪問數據庫,造成數據庫宕機,如果緩存數據沒有恢復的情況下,重啓數據庫後,高併發的請求訪問會導致數據庫再次宕機。這種緩存失效導致的數據庫重複宕機,重啓,叫做緩存擊穿/雪崩 。
解決緩存擊穿/雪崩的方法:
- 1.緩存集羣永不宕機。集羣中的一部分服務器一直提供訪問數據的需求。
- 2.緩存技術添加持久化的功能。Redis可以做到。
6 REDIS基礎應用場景
- 1、Web間Session共享。多個war工程共享一個Session。
- 2、分佈式緩存
因爲redis爲鍵值對,而且它提供了豐富的adapter可以支持到C、.net、java客戶端,因此對於異質平臺間進行數據交換起到了作用,它可以用作大型系統的分佈式緩存,並且其setnx的鎖常被用於秒殺、搶紅包這種電商活動場景中。