? ? ? ? Redis 是一個高性能的key-value數據庫。Redies支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)和zset(有序集合)。這些數據類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的,redis支持各種不同方式的排序。
? ? ? ? 對于數據庫而言,MySQL不就是很好的選擇嗎?為什么還要搞Redies?
? ? ? ? MySQL最大的問題在于,訪問速度比較慢,因為很多互聯網產品中,對于性能要求是很高的。這是相對而言的,只有在使用中才能感受得到。Redies和MySQL相比最大的劣勢就是存儲空間是有限的。
? ? ? ? 那將Redies和MySQL相結合性能方面相互彌補能否發揮更好的效果?
? ? ? ? 這樣會大大提升系統復雜程度,而且如果數據發生修改,還會涉及到Redies和MySQL之間的數據同步問題。
? ? ? ? Redies是在分布式系統中,才能發揮威力的~~
? ? ? ? 如果只是單機程序,直接通過變量存儲數據的方式,是比使用Redies更優的選擇。
首先讓我們來了解一下,“單機架構”。
那什么是單機架構,單機架構就是一臺服務器負責所有工作。
眾所周知,計算機的資源是有限的,總會有耗盡的時候。
?當訪問量增大,數據量增大,就會消耗大量的計算機資源。
比如說:CPU,服務器每次收到一個請求,都會消耗CPU的資源,如果同一時刻,有大量的訪問,CPU資源不夠用怎么辦。
如果系統資源不夠用,我們應該怎樣處理?
1,節流:就是軟件優化(憑借程序員的深厚經驗去測試性能,找到那個環節出錯或者達到性能瓶頸,去調整)
2,開源:就是增加更多的資源(你不是缺少資源嗎,那就給你增加資源)
一個主機上面能增加的硬件資源是有限的,這取決于主板的擴展能力,那如果增加到主板的極限還是不夠那又該怎樣處理。
那就再引入一臺機器,這樣可以解決問題嗎?答案是:可以。
但是這也會引入新的問題,這樣做需要對軟件做出相應的調整和適配。一旦引入多臺主機,這個系統就是”分布式系統“,上面的各種性能資源問題告訴我們,我們這樣做是沒有辦法的辦法。
引入分布式,系統的復雜程度會大大提高,Bug出現的概率也會變高,后期維護也隨之升高。
分布式系統:
?
? ? ? ? 上圖的應用服務器和存儲服務器,是獨立的機器,也就是分布式系統,將大量的資源集中起來,共同解決資源短缺的問題。
例如:當前有1W條請求,負載均衡算法(不同的算法會產生不同的效果)會將這些請求較均勻的分布給每一個應用服務器(可以有多臺服務器),這樣該系統的資源也就得到了相對的緩解。