redis为什么这么火该怎么用
最近一些人在介紹方案時(shí),經(jīng)常會出現(xiàn)redis這個(gè)詞,于是很多小伙伴百度完redis也就覺得它是一個(gè)緩存,然后項(xiàng)目里面把數(shù)據(jù)丟進(jìn)去完事,甚至有例如將實(shí)體屬性拆分塞進(jìn)redis hash里面的奇怪用法等等!原因是什么呢?大家覺得redis火,使用了redis項(xiàng)目就是高大上的,于是不管三七二十一,項(xiàng)目里用上強(qiáng)塞一個(gè)用上!這里本人想說的是你知道redis為什么這么火么,應(yīng)該怎么用么?下面帶著本人拙建,簡單分析一下:
一、redis性能
redis是一個(gè)基于內(nèi)存hash結(jié)構(gòu)的緩存型db,同mysql等傳統(tǒng)數(shù)據(jù)庫對比性能時(shí),讀操作在1k左右數(shù)據(jù)的時(shí)候相差基本上在10-100倍的差別,寫入的性能差別就更大了,下面是一些測試數(shù)據(jù)?
通過對redis的set、get命令測試觀察,redis的讀寫性能在單線程下可以達(dá)到每秒2W左右;通過對mysql的select和insert、delete語句測試,mysql的讀性能可達(dá)到5000每秒左右,寫性能可到達(dá)3000每秒,讀性能基本是寫性能的2倍。而上述測試是基于redis單實(shí)例、單連接的情況,如果根據(jù)cpu核數(shù)來增加redis實(shí)例,并且使用pie和多連接,這個(gè)數(shù)據(jù)還能輕松的再上一個(gè)數(shù)量級~也可參見一下網(wǎng)上其他人發(fā)布的一些redis性能測試,例如:https://www.sohu.com/a/29865580_219700。
二、redis緩存
上面分析了redis的性能非常高,基本上同機(jī)器配置下完全吊打傳統(tǒng)sql,甚至nosql的mongodb等。即使這樣redis也只是一個(gè)分布式緩存,或者說是分布式緩存數(shù)據(jù)庫,那么redis肯定不能像傳統(tǒng)數(shù)據(jù)一樣,動(dòng)不動(dòng)放個(gè)幾T的數(shù)據(jù),一般都是用來放熱數(shù)據(jù)或者體量小的數(shù)據(jù),其他的數(shù)據(jù)還是使用隊(duì)列通過后臺服務(wù)放到sql db里面;另外根據(jù)redis的特性,建議服務(wù)器cpu核心數(shù)要留個(gè)1/4,每個(gè)實(shí)例的內(nèi)存最得多出1/2;假如24核的120G的服務(wù)器,建議部署18個(gè)reids實(shí)例,每個(gè)實(shí)例5G的內(nèi)存,實(shí)際使用不要超過3G的數(shù)據(jù)量~reids是緩存就繼承了緩存的優(yōu)缺點(diǎn),性能高是優(yōu)點(diǎn),缺點(diǎn):緩存穿透、緩存雪崩。
1.緩存穿透:緩存穿透是指查詢一個(gè)一定不存在的數(shù)據(jù),由于緩存是不命中時(shí)被動(dòng)寫的,并且出于容錯(cuò)考慮,如果從存儲層查不到數(shù)據(jù)則不寫入緩存,這將導(dǎo)致這個(gè)不存在的數(shù)據(jù)每次請求都要到存儲層去查詢,失去了緩存的意義。在流量大時(shí),可能DB就掛了。
?
解決辦法就是將從db過來的返回值進(jìn)行緩存,根據(jù)實(shí)際情況重新加熱,若db返回是空則緩存幾分鐘就可以了。
? 2.緩存雪崩:在我們設(shè)置緩存時(shí)采用了相同的過期時(shí)間或者緩存服務(wù)器因某些原因無法使用時(shí),導(dǎo)致緩存在某一時(shí)刻同時(shí)失效,請求全部轉(zhuǎn)發(fā)到DB,DB瞬時(shí)壓力過重雪崩。
解決辦法過期時(shí)間上增加一個(gè)范圍的隨機(jī)值,使用Redis Sentinel 和 Redis Cluster 實(shí)現(xiàn)高可用,另增設(shè)一個(gè)壽命更短的本機(jī)緩存來解決redis分布緩存搶修時(shí)的問題。
在發(fā)生無論是緩存穿透還是緩存雪崩,都建議使用隊(duì)列來排隊(duì)、拒絕大量請求涌入和分布式互斥鎖來避免后端數(shù)據(jù)服務(wù)被沖擊,防止已有的數(shù)據(jù)出現(xiàn)問題。
三、總結(jié)
redis很強(qiáng)大,無論是哨兵式集群還是自帶的redis cluster方式集群,但是一定要對redis了解清楚才能更好的使用~
總結(jié)
以上是生活随笔為你收集整理的redis为什么这么火该怎么用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 技术管理者怎样跳出“泥潭”
- 下一篇: 微软宣布加入 OpenJDK,看网上各派