Redis的基礎安裝
首先介紹下redis:Redis 是當今非常流行的基於
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 從緩存當中讀取數據失敗,從從庫當中讀取到舊數據,然後更新至緩
存,這個時候,緩存當中的就是舊的數據。
發生上述不一致的原因在於,主從庫數據不一致問題,加入了緩存之後,主從不一致的時
間被拉長了
處理思路:在從庫有數據更新之後,將緩存當中的數據也同時進行更新,即當從庫發生了
數據更新之後,向緩存發出刪除,淘汰這段時間寫入的舊數據
總結 :自己學的有點慢慢,大家剛開始學習的堅持下。一起進步!