一、什麼是redis?
1、定義:數據庫
2、優勢:
- 單線程:順序執行,前面的代碼不執行完畢,後面的代碼不會執行。
- 原子性:一個操作,要麼全部成功,要麼全部失敗
- 速度快:使用內存存取數據,每秒支持10萬次讀寫
- 持久性:可以將數據保存在磁盤
- value支持多種數據類型:
String:存儲基本的字符串類型
List:比如消息隊列、粉絲列表
Set:不重複的集合,交集,並集,差集
sSet:有序的集合,權重,排行榜
HashMap:常用來存儲對象類型,例如cookies對象
二、問題
- 緩存和數據庫讀寫一致性:有強一致性要求的數據,不能放緩存
- 緩存雪崩:緩存同時大面積的失效,這個時候又來了一波請求,結果請求都懟到數據庫上,從而導致數據庫連接異常。
- 緩存擊穿:故意去請求緩存中不存在的數據,導致所有的請求都懟到數據庫上,從而數據庫連接異常
- 緩存的併發競爭:同時set一個key
三、Redis和本地緩存的對比
- 本地緩存:只能應用在相應的服務本身,無法共享,而Redis是分佈式的
- 本地緩存想要用好需要涉及的東西太複雜、內存擴展、緩存過期、併發、多種數據結構類型的支持 3、無法持久化,服務關閉,則緩存失效
四、應用緩存的目的
- 1、高性能
一個請求到數據庫中需要大約300ms,而到緩存中只需要3ms - 2、高併發
MySQL單機支持的併發量只有幾千,而Redis緩存可達到十萬左右