《redis設計與實現》

2021-10-10 04:10:30 字數 860 閱讀 6611

提高系統架構的效能,增加快取層是常見的優化方式,redis和memcache是當前採用較多的快取元件,redis被稱為資料結構資料庫

redis和memcache的區別:

redis和memcahce都是基於記憶體的key-value儲存

memcache的事件模型是多執行緒reactor模型, 效能更好,但是只支援一種key-value型別,複雜的資料結構需要使用者自己做序列化

redis是單執行緒,但是支援更多的資料結構,並且支援持久化和主從複製

redis常作為網際網路高併發請時的中介軟體,但是會有以下常見的三種問題:

1.快取穿透:查詢的資料不存在,快取和資料庫中都沒有,大量的這種請求就會對資料庫造成壓力

解決方案:

a.使用布隆過濾器,即位圖bitmap,盡可能將所有可能的不存在資料都儲存下來,過濾掉不存在的請求

b.即使資料不存在,也要新增到redis快取裡,將value設成空,避免頻繁訪問資料庫

2.快取擊穿:查詢的某一條熱點資料在快取中已過期,此時有大量針對此條資料的訪問,由於快取查詢不到會造成都到資料庫中查詢,導致資料庫壓力飆公升

解決方案:

a.利用redis自帶的setnx實現分布式鎖,當key已過期時,加上分布式鎖,獲取到鎖就到資料庫中查詢並更新快取,獲取不到鎖說明有其他執行緒已經在查詢資料庫,睡眠一會嘗試再次從redis快取中查詢

3.快取雪崩:當redis重啟或者大量key同時全部過期,此時若有大量請求,稱為快取雪崩,會對資料庫造成更大的壓力

解決方案:

a.和快取擊穿一樣,使用分布式鎖或者佇列減輕資料庫壓力,但是會造成請求堵塞

b.針對大量key全部過期這種,可以在設定過期時間設定隨機值,防止同時過期

以下是redis的部分實現:

Redis 設計與實現

本書的目標是以簡明易懂的方式講解 redis 的內部執行機制,通過閱讀本書,你可以了解到 redis 從資料結構到伺服器構造在內的幾乎所有知識。為了保證內容的簡潔性,本書會盡量以高抽象層次的角度來觀察 redis 並將 的細節留給讀者自己去考究。如果讀者只是對 redis 的內部運作機制感興趣,但並...

redis設計與實現

物件所使用的底層資料結構 編碼常量 object encoding 命令輸出 整數redis encoding int int embstr編碼的簡單動態字串 sds redis encoding embstr embstr 簡單動態字串 redis encoding raw raw 字典redis...

Redis設計與實現(一)

redis是一種現在挺火的一種nosql資料庫,它一般被用作快取。比如我們可以在redis客戶端敲 redis set msg helloredis 那麼就會在redis資料庫中建立乙個新的鍵值對,keg是msg,value是helloredis,兩個都是sds。又比如在redis客戶端敲 redi...