redis 相關知識

2022-06-05 09:36:09 字數 2462 閱讀 6388

mysql關係型資料庫資料儲存的問題

1,效能瓶頸  磁碟io效能低下

2,擴充套件瓶頸 資料關係複雜,擴充套件性差,不利於搭建集群維護

3,資料增多會讓查詢速度變慢

所以為了減少磁碟io次數,和資料之間的關係,就有了乙個新的概念 nosql

nosql (not-only sql)  非關係型資料庫 ,基於記憶體結構,資料之間沒有關係。作為關係型資料庫的補充,應對現在基於海量使用者和海量資料的的資料處理問題。

比如電商場景下 會把熱點和活動期間需要高頻訪問的資料快取到redis當中,

redis是乙個開源的可基於記憶體、分布式、可選永續性的鍵值對(key-value)儲存資料庫儲存系統

redis的特點

1 高效能 , 記憶體儲存不走 io 在大資料量下也可以實現高效能執行  官方提供測試資料,50個併發執行100000個請求,讀110000 次/s,寫81000次/s

2 資料結構豐富  支援的資料型別有  string(字串) hash(雜湊)  list(列表)  set (集合)   zset(sorted set:有序集合)。

3 原子性 核心讀寫部分是單執行緒 排隊執行 對應的操作便具有了原子性,避免多執行緒帶來的複雜性和不安全型

4 高可用,redis 從3.0開始支援集群,可多主多從 ,單個節點故障,其他機器可迅速頂替,保證集群的高可用

5 可持久化,支援把資料持久化到硬碟中,以免遇到重啟或者故障後可以從硬碟中恢復

實際上redis每種資料結構都有自己底層的內部編碼實現,而且是多種實現,例如list資料介面就包含了linkedlist和ziplist兩種內部編碼,同時有些內部編碼可以作為多種外部資料結構的內部實現,可以通過object encoding 命令查詢內部編碼    如 object encoding hello;

應用場景

1,快取,查詢頻率較高,不經常變得資料

2,即時資訊,臨時型的,經常變化的

3,session共享,可使用者解決分布式中session共享的問題  時效性訊息,佇列訊息等

redis 的刪除策略和淘汰策略  

刪除策略是指已經過期的資料怎麼刪除

1,定時刪除      節省記憶體cpu壓力大 ,  不分時間段 到時間即刪除過期資料    即使cpu效能使用過高時也會執行 占用cpu資源 

2,懶惰刪除      節約cpu效能記憶體壓力大,  資料到達過期時間,不做處理。等下次訪問該資料時,我們需要判斷,如果未過期,返回資料。發現已過期,則刪除,返回不存在。

3,定期刪除    定期隨機刪除  , 使用固定的cpu資源  隨機抽查  當前一場抽查刪除很多資料時會再次抽查當前資料。週期性抽查儲存空間(隨機抽查,重點抽查)

淘汰機制是指當記憶體不夠時淘汰掉一些資料以騰出記憶體空間,淘汰的可能是還未過期的資料

redis在執行每個指令前,都要呼叫freememoryifneeded()檢測記憶體是否充足,如果不能滿足新加入資料的最低儲存大小,redis要刪除一些資料為新的資料騰出一些記憶體空間,此為逐出演算法。

可以選擇執行淘汰策略   長時間不用的、用的次數少的、快要過去過期的或者隨機淘汰,也可也全盤刪除獲取不進行淘汰

面試可能會問道的redis常見的問題和解決方案

1  快取預熱,提前把需要用到的熱點資料快取到redis 避免大請求打到mysql類的關係型資料庫上

2  快取穿透  當大量請求來查詢沒有的資料

,請求到達redis 發現沒有命中,然後請求到達了mysql 

比如大量請求來查詢id的-1 的資料   那mysql資料的id都是從0開自增,當然就沒有資料  這個時候就要排查問題 ,可能存在黑客攻擊等問題,可以在介面處做基礎校驗,使用者校驗、id做基礎校驗,id<=0的直接攔截

如果是相同的請求請求很多次,那麼可以選擇把固定的key快取到redis,對應的value為null,

如果是 每次請求引數不同,那可以快取所有的不存在的key,記憶體壓力過大淘汰機制會把有效資料淘汰。level1的方案已經不能解決。也可以使用布隆過濾器等過濾每次請求,不存在的資料會無法通過布隆過濾器,可以使用不超過1g的記憶體,儲存超過百億的資料量。

3 快取雪崩  短時內大量的熱點key同時過期  然後大量請求到mysql,造成mysql壓力變大   如**做活動是大量的快取熱點資訊過期   然後使用者請求直接打到mysql

解決方法 錯峰設定熱帶資料的過期時間,採用不同的固定時間+-隨機時間,避免同時失效的情況, 或者讓快取永不失效,之後再修改,還可以通過加互斥鎖。

4 快取擊穿,  某個熱點key過期  導致大量請求到mysql,  解決方法  監控超熱資料 適當延長過期時間,或者設定長期有效,之後再修改,還可以通過加互斥鎖

。完全基於記憶體,絕大部分請求是純粹的記憶體操作,執行效率高 採用單執行緒,單執行緒也能處理高併發請求,想多核也可啟動多例項

單執行緒反而避免了多執行緒的頻繁上下文切換問題,預防了多執行緒可能產生的競爭問題。

核心是基於非阻塞的 io 多路復用機制。

Redis相關知識(二)

redis 事務的本質是通過multi exec watch等一組命令的集合。事務支援一次執行多個命令,乙個事務中所有命令都會被序列化。在事務執行過程,會按照順序序列化執行佇列中的命令,其他客戶端提交的命令請求不會插入到事務執行命令序列中。事務開始 multi 命令入隊 事務執行 exec 原子性是...

redis的相關知識

pom.xml 加入 org.springframework.datagroupid spring data redisartifactid 1.6.0.releaseversion dependency redis.clientsgroupid jedisartifactid 2.7.3versi...

Redis相關基本知識

1 redis預設16個庫 配置檔案內容如下 set the number of databases.the default database is db 0,you can select a different one on a per connection basis using select ...