Redis的入門學習

Redis的基礎安裝

首先介紹下redis:Redis 是當今非常流行的基於

KV(key value) 結構的作為 Cache(緩存) 使用的 NoSQL 數據庫。Remote Dictionary Server(Redis)是一個開源的使用 C 語言編寫、支持網絡、可基於內存,亦可持久化的 Key-Value 數據庫. Key 字符類型,其值(value)可以是字符串(String), 哈希(Map),列表(list), 集合(sets) 和有序集合(sorted sets)等

Redis的安裝地址:


redis安裝地址

在Linux下的安裝:

(1) 安裝

1. 上傳 redis-4.0.13.tar.gz 到 linux 系統。使用 Xftp 工具

2. 解壓 redis-4.0.13.tar.gz 到/usr/local 目錄

3. 查看解壓後的文件

切換目錄 cd /usr/local

執行 ll

4. 安裝 gcc 編譯器。

Redis 是使用 c 語言編寫的。使用源文件安裝方式,需要編譯 c 源文件,會使用 gcc 編譯器。

什麼是 gcc ?

gcc 是 GNU compiler collection 的縮寫,它是 Linux 下一個編譯器集合(相當於 javac ),是c 或 c++程序的編譯器。

使用yum進行安裝gcc 。

執行命令:yum -y install gcc

5. 編譯 redis 源文件。

1) 開始執行 make

cd /usr/local/redis-4.0.13 再執行 make

6)起動redisde的方式

啟動 Redis

redis 安裝目錄下 redis.conf 是重要的配置文件,包含 redis 服務器的配置信息。

啟動 redis 需要指定配置文件路徑。

啟動方式:

①前臺啟動 ./redis-server redis.conf 配置文件路徑

②後臺啟動 ./redis-server redis.conf 配置文件路徑 &

第①種 前臺啟動

啟動 Redis 的服務器端:切換到 src 目錄下執行 redis-server 程序

啟動成功的界面


redis的相關面試問題



緩存穿透、緩存擊穿、緩存雪崩解決方案?

緩存穿透

指查詢一個一定不存在的數據,如果從存儲層查不到數據則不寫入緩存,這將

導致這個不存在的數據每次請求都要到 DB 去查詢,可能導致 DB 掛掉。


解決方案:1.查詢返回的數據為空,仍把這個空結果進行緩存,但過期時間會比較短;2.布

隆過濾器:將所有可能存在的數據哈希到一個足夠大的 bitmap 中,一個一定不存在的數據

會被這個 bitmap 攔截掉,從而避免了對 DB 的查詢。


緩存擊穿

對於設置了過期時間的 key,緩存在某個時間點過期的時候,恰好這時間點對

這個 Key 有大量的併發請求過來,這些請求發現緩存過期一般都會從後端 DB 加載數據並

回設到緩存,這個時候大併發的請求可能會瞬間把 DB 壓垮。

解決方案:1.使用互斥鎖:當緩存失效時,不立即去 load db,先使用如 Redis 的 setnx 去設置一個互斥鎖,當操作成功返回時再進行 load db 的操作並回設緩存,否則重試 get 緩存的


方法。2.永遠不過期:物理不過期,但邏輯過期(後臺異步線程去刷新)。

緩存雪崩:設置緩存時採用了相同的過期時間,導致緩存在某一時刻同時失效,請求全部

轉發到 DB,DB 瞬時壓力過重雪崩。


緩存雪崩

與緩存擊穿的區別:雪崩是很多 key,擊穿是某一個key 緩存。


解決方案:將緩存失效時間分散開,比如可以在原有的失效時間基礎上增加一個隨機值,

比如 1-5 分鐘隨機,這樣每一個緩存的過期時間的重複率就會降低,就很難引發集體失效

的事件。


緩存與數據庫不一致怎麼辦

假設採用的主存分離,讀寫分離的數據庫,

如果一個線程 A 先刪除緩存數據,然後將數據寫入到主庫當中,這個時候,主庫和從庫同

步沒有完成,線程 B 從緩存當中讀取數據失敗,從從庫當中讀取到舊數據,然後更新至緩

存,這個時候,緩存當中的就是舊的數據。

發生上述不一致的原因在於,主從庫數據不一致問題,加入了緩存之後,主從不一致的時

間被拉長了

處理思路:在從庫有數據更新之後,將緩存當中的數據也同時進行更新,即當從庫發生了

數據更新之後,向緩存發出刪除,淘汰這段時間寫入的舊數據

總結 :自己學的有點慢慢,大家剛開始學習的堅持下。一起進步!