Redis核心技術
阿新 • • 發佈:2019-02-13
一、持久化(對比 memcache)1、RDB持久化(持久化記憶體資料)2、AOF(持久化 buffer中的命令)二、單執行緒優勢:對小資料的吞吐效能高於memcached(不存線上程分配、執行緒切換的時間消耗)劣勢:對大資料塊的吞吐能力比較吃力(大資料塊的讀寫造成的IO阻塞,使單執行緒的劣勢暴露出來)當資料大小超過10K時,redis寫入效能已經慢讓人無法忍受;當然在讀效能上依然可觀,因為資料在記憶體中,基於記憶體的讀寫速度比從磁碟讀到記憶體快的多。三、釋出/訂閱支援釋出、訂閱模式,使其不僅僅是一款快取中介軟體,也可用作一個訊息對列,以及註冊中心(對比於 zookeeper做註冊中心)Redis釋出/訂閱 是一種訊息廣播模型,而不支援單播模式;所以釋出、訂閱多用於註冊中心,而不是訊息佇列。四、事務—— MULTI+EXEC命令入Queue的事務保證,命令執行卻無法保證事務特性五、複製 —— SLAVEOF詳細挖掘redis的複製功能改進六、高可用—— sentinel七、分散式其群—— CLUSTER六七,對比memecache,memcached是沒有分散式協調能力的,需要藉助客戶端完成分散式協調八、常見難題1、快取穿透(指,查詢一個不存在的key值,即快取未命中而DB中也沒有;會不斷頻繁的訪問資料庫)經常是為了防止有人惡意針對未存在的資料做查詢而導致資料庫因高併發訪問而崩潰。解決方案:①當在資料庫中未查詢到該key值時,仍然將該key寫入快取(其值為null),並設定過期時間;以保護後端資料來源(過期時間為解決空間膨脹,而該key因BD後續插入導致的不一致問題,可以在DB插入後以訊息方式通知redis擦除響應key)②布隆過濾器使用redis-Bitmaps構建布隆過濾器;布隆過濾器儲存了所有快取目標的key(當資料插入新行時,需要更新布隆過濾器);則程式訪問資料的路線是:——布隆過濾器(miss/存在)——快取(hit / miss)——DB即,先訪問BloomFilter,在BloomFilter中命中才去訪問快取(快取命中則返回,未命中則訪問DB)Notice:布隆過濾器適用於資料實時性不高的場景2、熱點key某熱點key在失效後,被高併發訪問,繼而大量執行緒來重建該快取key值,導致應用後端負載加大,應用崩潰。解決方案:①寫快取互斥鎖:即:快取miss則去獲取mutex-lock,獲取鎖後重建快取;未獲取到所則,執行緒等待一段時間,繼續執行上一步驟(查詢快取。。。)②3、快取擊穿4、快取失效5、快取雪崩由於快取層宕掉等原因,導致高併發的請求訪問儲存層,致使儲存層服務奔潰。(快取在高併發環境保護儲存層)解決方案:①快取層高可用HARedis-Sentinel,Redis-Cluster②資源池、執行緒池等限流策略