Redis入門

redis特性

? ??????(1)速度快;(2)鍵值對的數(shù)據(jù)結(jié)構(gòu)服務(wù)器;(3)豐富的功能;(4)簡單穩(wěn)定(單線程);(5)持久化;(6)主從復(fù)制;(7)高可用和分布式轉(zhuǎn)移(哨兵模式實現(xiàn)高可用);(8)客戶端語言多

五種數(shù)據(jù)結(jié)構(gòu)

? ??????string,set(用戶標簽,社交,查詢有共同興趣愛好的人),list(時間軸,消息隊列),zset(用于排行榜、點贊數(shù)),hash

? ? ? ?使用:

? ??????1、Set key value ex time:ex代表過期時間;setnx name test //不存在鍵name 時,返回1 設(shè)置成功存在的話失敗0,用于分布式鎖。

? ? ? ? 2、incr age //必須為整數(shù)自加1,非整數(shù)返回錯誤,無age 鍵從0 自增返回1;decr age //整數(shù)age 減1;incrby age 2 //整數(shù)age+2;decrby age 2//整數(shù)age -2;incrbyfloat score 1.1 //浮點

? ? ? ? 3、Value值最大值能存512m

解決緩存雪崩

? ??????當去數(shù)據(jù)庫查詢時,增加鎖的機制。熱門數(shù)據(jù)失效時間設(shè)置長一點,冷門數(shù)據(jù)設(shè)置失效時間短一點,節(jié)約資源。

如何解決緩存穿透

? ??????在數(shù)據(jù)庫查之前,增加一個布隆過濾器,把所以數(shù)據(jù)庫的值提前查出來放到布隆過濾器里,然后傳入的數(shù)據(jù)先去布隆過濾器查詢,如果返回true再去數(shù)據(jù)庫查詢。

Redis持久化

? ? ? ? 兩種方式:rdb和aof

? ??????bgsave運行流程:

? ??????Rdb不適合實時的持久化,所以redis提供了aof來解決。開啟設(shè)置:redis.conf :appendonly yes(默認為no)默認文件名:appendfilename:”appendonly.aof”

? ??????aof流程說明:(1)所有的寫入命令(set hset)會append追加到aof_buff緩沖區(qū)中;(2)AOF緩沖區(qū)向硬盤做sync同步;(3)隨著aof文件越來越大,需定期對aof文件rewrite重寫,達到壓縮;(4)當redis服務(wù)重啟,可load加載aof文件進行恢復(fù)。

? ??????aof說明:Appendonly yes開啟aof;appendfsync always 每收到寫命令就立即強制寫入磁盤,最慢的,但是保證完全的持久化;appendfsync everysec 每秒強制寫入一次,性能和持久化方面做了折中,推薦;no-appendfsync-on-rewrite yes 正在導(dǎo)出rdb快照的過程中,要不要停止同步aof(建議是yes);auto-aof-rewrite-percentage 100 aof文件比上次重寫超過100%時重寫;auto-aof-rewrite-min-size 64mb aof文件至少超過64m時重寫。

? ??????Redis重啟時加載aof和rdb的順序:判定是否開啟aof,如果開啟了則判定是否有aof文件,如果存在則加載aof,如果不存在則判定是否有rdb文件,如果沒有則啟動成功,如果有則加載rdb文件并啟動。Rdb比aof恢復(fù)數(shù)據(jù)快

Lua

? ??????Lua腳本是原子性操作

????????使用lua腳本好處

? ??????(1)減少網(wǎng)絡(luò)開銷,在lua腳本中可以把多個命令放在同一個腳本中運行;(2)原子操作,redis會將整個腳本作為一個整體執(zhí)行,中間不會被其他命令插入,換句話說,編寫腳本的過程中無需擔(dān)心會出現(xiàn)競爭條件;(3)復(fù)用性,客戶端發(fā)送的腳本會永遠存儲在redis中,這意味著其他客戶端可以復(fù)用這一腳本來完成同樣的邏輯。




Redis性能測試及弱事務(wù)實戰(zhàn)

測試redis性能命令

? ???(1)redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 10000 一百個并發(fā)連接,一萬個請求檢測服務(wù)器性能;(2)redis-benchmark -h 127.0.0.1 -p 6379 -q -d 100 測試存取大小為100字節(jié)的數(shù)據(jù)包的性能;(3)redis-benchmark -h 127.0.0.1 -p 6379 -t set,get -n 10000 -q 只測試set,get操作的性能;(4)redis-benchmark -h 127.0.0.1 -p 6379 -n 10000 -q script load “redis.call(‘set’,’foo’,’bar’)”只測試某些值存取的性能。

Redis運行原理流程

? ??????(1)發(fā)送命令;(2)命令排隊;(3)執(zhí)行命令;(4)返回結(jié)果

Redis協(xié)議

? ??????Redis基于resp協(xié)議.

Pipeline

? ??????Pipeline可以減少網(wǎng)絡(luò)通訊,把一組redis操作放到一起執(zhí)行,節(jié)省網(wǎng)絡(luò)開銷

Redis也支持事務(wù)

? ??????multi事務(wù)開始;exec事務(wù)結(jié)束.Redis支持簡單的事務(wù),不支持回滾

Watch命令

? ??????使用watch后,multi失效,事務(wù)失效



Redis高可用模式解讀

主從模式

? ?????1、一主一從:用于主節(jié)點故障轉(zhuǎn)移從節(jié)點,當主節(jié)點的“寫”命令并發(fā)高且需要持久化,可以只在從節(jié)點開啟AOF(主節(jié)點不需要)。

????????2、一主多從:針對“讀”較多的場景,“讀”由多個從節(jié)點來分擔(dān),但節(jié)點越多,主節(jié)點同步到多節(jié)點的次數(shù)也越多,影響帶寬,也加重主節(jié)點的穩(wěn)定。

????????3、樹狀主從:一主多從的缺點可用些方案解決,主節(jié)點只推送一次數(shù)據(jù)到從節(jié)點1,再由從節(jié)點2推送到節(jié)點11,減輕主節(jié)點推送壓力。

哨兵模式

集群模式

????????集群節(jié)點之間使用gossip協(xié)議進行信息通訊的

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容