-
Redis概述
Redis是一種以內(nèi)存作為存儲介質(zhì)的非關(guān)系型數(shù)據(jù)庫牌借,其使用KV鍵值對保存數(shù)據(jù)度气。所以性能十分優(yōu)越。官方給定讀取速度:GET讀 (110000/s)膨报;SET寫 (81000/s)
-
應(yīng)用場景:
①緩存熱點或常用數(shù)據(jù)(評論)
②消息隊列(支付)
③高速讀寫場景(現(xiàn)場投票)
-
注意事項
①業(yè)務(wù)數(shù)據(jù)如果命中率很低磷籍,就沒有必要寫入Redis。
②業(yè)務(wù)數(shù)據(jù)寫操作多现柠,頻繁需要寫入數(shù)據(jù)庫院领,也沒有必要使用Redis。
③業(yè)務(wù)數(shù)據(jù)要存儲幾百兆字節(jié)的文件够吩,會給Redis帶來很大的 壓力比然,也沒有必要使用Redis。
-
五種數(shù)據(jù)類型
①String(字符串)
set 鍵 值
get 鍵
②Hash(哈希):每個hash可以存儲4294967295個鍵值對(2^31 - 1)
hset 鍵 字段 值
hmset 鍵 字段1 值1 字段2 值2 字段n 值n
hget 鍵 字段
hmget 鍵 字段1 值1 字段2 值2 字段n 值n
hgetall 鍵
③List(列表):每個列表可以存儲4294967295個值(2^31 - 1)
lpush 鍵 值1 值2 值3
lrange 鍵 開始下標 結(jié)束下標
④Set(集合)
sadd 鍵 值1 值2 值3 值n
smembers 鍵
⑤Zset(Sorted Set:有序集合)
zadd 鍵 分數(shù)1 值1 分數(shù)2 值2 分數(shù)n 值n
zrange 鍵 開始下標 結(jié)束下標
zrangebyscore 鍵 開始分值 結(jié)束分值
-
Redis為什么這么快周循?
①采用內(nèi)存作為存儲介質(zhì)强法。
②KV鍵值對結(jié)構(gòu)相對簡單,不會帶來額外的性能開銷
③單線程
④使用C/C++開發(fā),數(shù)據(jù)庫操作更貼近底層
-
緩存穿透
緩存穿透是指緩存和數(shù)據(jù)庫中都沒有的數(shù)據(jù)湾笛,而用戶不斷發(fā)起請求拟烫,如發(fā)起為id為"-1"的數(shù)據(jù)或id為特別大不存在的數(shù)據(jù)。這時的用戶很可能是攻擊者迄本,攻擊會導致數(shù)據(jù)庫壓力過大硕淑。
解決方案:
? ①接口層增加校驗,如用戶鑒權(quán)校驗嘉赎,id做基礎(chǔ)校驗置媳,id<=0的直接攔截;
? ②從緩存取不到的數(shù)據(jù)公条,在數(shù)據(jù)庫中也沒有取到拇囊,這時也可以將key-value對寫為key-null ,緩存有效時間可以設(shè)置短點靶橱,如30秒(設(shè)置太長會導致正常情況也沒法使用)寥袭。這樣可以防止攻擊用戶反復用同一一個id暴力攻擊路捧。
-
緩存擊穿
緩存擊穿是指緩存中沒有但數(shù)據(jù)庫中有的數(shù)據(jù)( 一般是緩存時間到期),這時由于并發(fā)用戶特別多传黄,同時讀緩存沒讀到數(shù)據(jù)杰扫,又同時去數(shù)據(jù)庫去取數(shù)據(jù),引起數(shù)據(jù)庫壓力瞬間增大膘掰,造成過大壓力章姓。
解決方案:
? ①設(shè)置熱點數(shù)據(jù)永遠不過期。
? ②定時任務(wù)更新緩存數(shù)據(jù)
? ③加互斥鎖
-
緩存雪崩
緩存雪崩是指緩存中數(shù)據(jù)大批量到過期時間识埋,而查詢數(shù)據(jù)量巨大凡伊,引起數(shù)據(jù)庫壓力過大甚至down機。和緩存擊穿不同的是窒舟,緩存擊穿指并發(fā)查同一條數(shù)據(jù)系忙,緩存雪崩是不同數(shù)據(jù)都過期了,很多數(shù)據(jù)都查不到從而查數(shù)據(jù)庫惠豺。
解決方案:
? ①緩存數(shù)據(jù)的過期時間設(shè)置隨機银还,防止同一時間大量數(shù)據(jù)過期現(xiàn)象發(fā)生。
? ②如果緩存數(shù)據(jù)庫是分布式部署耕腾,將熱點數(shù)據(jù)均勻分布在不同的緩存數(shù)據(jù)庫中见剩。
? ③設(shè)置熱點數(shù)據(jù)永遠不過期。
-
常用命令
獲取所有鍵:keys *
獲取鍵總數(shù):dbsize
查詢鍵是否存在:exists key 鍵
刪除鍵: del key 鍵
查詢鍵類型:type 鍵
查詢key的生命周期:
? 秒語法: ttl key
? 亳秒語法:pttl key
設(shè)置過期時間:
? 秒語法:expire key seconds
? 亳秒語法: pexpire key milliseconds
設(shè)置永不過期:persist 鍵
更改鍵名稱:rename 鍵 新鍵