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é)議進行信息通訊的