redis的優點和缺點


 

優點:

redis是一個key_value存儲庫,數據保存在內存中,可以承受高並發讀寫
redis支持多種特性,如 事務 主從 key過期策略 訂閱-發布
支持多種數據類型
單線程處理客戶端請求,節省了上下文切換時間,但是同樣也會不能充分利用多核處理器的優點

缺點
因為數據是保存在內存中的,所以會收機器內存大小的限制
當key過期策略設置不當,或者數據爆發時,可能會導致redis崩潰,需要合理配置key過期策略,哨兵模式以及內存持久化策略
當增加redis從機時,需要從主機同步全部數據,占用大量io


key過期策略
  定期刪除 每隔指定時間,隨機抽取設定了過期的key,如果過期則刪除
  惰性刪除 當請求是判斷key是否過期,過期刪除,什么都不返回
內存持久化策略:
  rdb:在達到 指定的時間間隔和變化次數 將內存中數據持久化存儲到硬盤中
  aof:記錄redis的每一次變化,並將數據追加到硬盤文件中,因為記錄了數據的每一次追加,所以文件會比rdb的要大,性能也要差一些
    對於aof文件大的問題,當文件達到一定大小時,會觸發rewrite,即從內存中重新持久化一份最新數據,丟棄之前的變化。
    比如 a:a1;a:a2;a:a3 aof會保存每一個變化指令,重寫后,只包含最新數據,不再有變化記錄
    因為重寫機制的存在,所以要合理配置 文件重寫的大小
哨兵模式:
  redis會啟用一個進程監控redis主從庫,當redis主庫掛掉的時候,會對從庫進行選舉,選舉得分高的從庫,將變成主庫

當redis做關系型數據庫的緩存時,可能會出現下面問題,
  緩存穿透:當用戶請求一個不存在的數據,請求會直接穿過redis,請求到rdb中,redis起不到緩存的作用,當請求很多時,數據庫壓力會變大
  緩存擊穿:當redis中key存在,但是已經過期,大量並發請求也會直接穿透內存,請求到rdb,並緩存到redis,並發量很大時,后端數據庫,可能會被壓垮
  緩存雪崩:當redis中大量key在同一時間段失效,或者服務重啟,也會給后端數據庫,帶來很大壓力


  解決辦法:
    1.對后端數據庫的請求,加鎖和隊列,保證即使雪崩出現,也不會把數據庫壓垮

    2.將熱點數據的失效時間 分散開,在原有的失效時間上,再加上隨機數,保證不會有大量數據在同一時間段失效

    3.熱點數據還可以設置成永不失效

    4.異步更新,即及時緩存中不存在,也返回,另起一個線程定時更新緩存數據庫

    5.使用過濾器,進行請求攔截,維護一個很大的隊列,保存有數據庫中所有可能存在的key,如果請求key不在隊列里,直接返回

    6.緩存空數據,請求的key即使為空,也可以緩存到redis中,並設置適當的緩存時間

  

由於同步的存在,所以 后端數據庫和緩存數據庫,是不能保證一定一致的,如果業務需求要求強一致性需求的數據,那么就不能使用緩存

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM