云南網(wǎng)站建設(shè)找天軟陜西seo推廣
目錄
Redis簡(jiǎn)介
Redis在內(nèi)存中存儲(chǔ)數(shù)據(jù)
Redis數(shù)據(jù)庫(kù)中的應(yīng)用?
Redis緩存中的應(yīng)用
Redis消息中間件?
尾言
Redis簡(jiǎn)介
如下是Redis官網(wǎng)中,對(duì)Redis的一段描述
在這段描述中,我們提取如下關(guān)鍵要點(diǎn):
- Redis主要用于在內(nèi)存中存儲(chǔ)數(shù)據(jù)
- Redis可以當(dāng)成緩存使用
- Redis可以當(dāng)成數(shù)據(jù)庫(kù)使用
- Redis可以當(dāng)成消息中間件使用?
基于上述要點(diǎn),我們接下來(lái)初步認(rèn)識(shí)一下Redis
Redis在內(nèi)存中存儲(chǔ)數(shù)據(jù)
提起這個(gè)問題,可能會(huì)很奇怪,所謂的在內(nèi)存中存儲(chǔ)數(shù)據(jù),難道不可以定義變量嗎?定義變量不就是在內(nèi)存中存儲(chǔ)數(shù)據(jù)嗎?
實(shí)際上,Redis在內(nèi)存中存儲(chǔ)數(shù)據(jù)主要應(yīng)用于分布式系統(tǒng)中
若是單機(jī)情況下,我們?cè)谡Z(yǔ)言中通過(guò)定義變量的方式是一種更優(yōu)的選擇
回憶一下:我們說(shuō)進(jìn)程之間是具有隔離性的,即一個(gè)進(jìn)程想直接訪問另一個(gè)進(jìn)程的內(nèi)存和數(shù)據(jù)是不可能的,但分布式系統(tǒng)中就一定要求了一個(gè)進(jìn)程能訪問另一個(gè)進(jìn)程的內(nèi)存數(shù)據(jù)。
為了解決進(jìn)程的隔離性帶來(lái)的問題,我們引入了進(jìn)程間通信的技術(shù)
而在當(dāng)今互聯(lián)網(wǎng)中,最常用于進(jìn)程間通信的技術(shù)是網(wǎng)絡(luò)
所以Redis的功能之一就是基于網(wǎng)絡(luò)實(shí)現(xiàn)分布式系統(tǒng)下的進(jìn)程間通信的技術(shù)
Redis數(shù)據(jù)庫(kù)中的應(yīng)用?
Redis可以應(yīng)用于數(shù)據(jù)庫(kù)領(lǐng)域,我們應(yīng)該知道,數(shù)據(jù)庫(kù)如今最廣泛使用的是MySQL,那么Redis與他相比有哪些優(yōu)勢(shì),又有哪些劣勢(shì)呢?
Redis vs MySQL : 優(yōu)勢(shì)?
Redis與MySQL相比,最大的優(yōu)勢(shì)就是快!
我們都知道MySQL是把數(shù)據(jù)存儲(chǔ)到硬盤上的,而Redis是把數(shù)據(jù)存儲(chǔ)在內(nèi)存中的,根據(jù)馮諾依曼體系結(jié)構(gòu)我們知道,訪問內(nèi)存中的數(shù)據(jù)一定比訪問外設(shè)上的數(shù)據(jù)要快的多!
Redis vs MySQL : 劣勢(shì)?
在當(dāng)今的互聯(lián)網(wǎng)公司中,雖然有很大一部分對(duì)于訪問數(shù)據(jù)的效率要求比較高,但更大一部分的互聯(lián)網(wǎng)公司對(duì)數(shù)據(jù)訪問要求沒那么高,Redis把數(shù)據(jù)存儲(chǔ)到內(nèi)存的方式,雖然提高了訪問效率,但同時(shí)也帶來(lái)了內(nèi)存存儲(chǔ)的另一個(gè)弊端:存儲(chǔ)空間大小有限
對(duì)于同樣多的一組數(shù)據(jù),存儲(chǔ)到內(nèi)存上所需要的成本肯定是比存儲(chǔ)到硬盤中要大的。這會(huì)導(dǎo)致成本的提高
總的來(lái)說(shuō)若對(duì)于數(shù)據(jù)訪問效率沒有那么高,并且想控制成本,可以使用MySQL,但若對(duì)于數(shù)據(jù)訪問效率有較高的要求,那么就要用到Redis了
Redis緩存中的應(yīng)用
在上述Redis作為數(shù)據(jù)庫(kù)中我們了解到,若需要訪問效率較高,?使用Redis。但帶來(lái)的是存儲(chǔ)成本的增加。
有沒有一種方案是既可以節(jié)省成本(內(nèi)存空間),又可以提高訪問效率的呢?
這就不得不提到計(jì)算機(jī)中的二八原則!
二八原則:在當(dāng)今互聯(lián)網(wǎng)中,百分之20的熱點(diǎn)數(shù)據(jù),已經(jīng)可以滿足用戶百分之80的使用需求了
我們依據(jù)這個(gè)原則,可以把百分之20的熱點(diǎn)數(shù)據(jù)存儲(chǔ)到內(nèi)存中,剩余的存量數(shù)據(jù)存儲(chǔ)到硬盤中即可,需要的時(shí)候再拿
這樣就會(huì)使得我們?cè)O(shè)計(jì)出來(lái)的系統(tǒng)即擁有較高的訪問速度,需要的內(nèi)存空間是較少的。
在這種方案中,Redis就是作為一個(gè)緩存的角色存在
但與此同時(shí),這種設(shè)計(jì)方案也帶來(lái)了如下問題:
- 系統(tǒng)的復(fù)雜程度大大提升了
- 如果數(shù)據(jù)發(fā)生修改,還涉及到Redis和MySQL之間的數(shù)據(jù)同步問題
Redis消息中間件?
Redis作為消息中間件(消息隊(duì)列)是Redis被制造出來(lái)的初心,但后來(lái)由于經(jīng)過(guò)大量實(shí)踐,發(fā)現(xiàn)Redis作為緩存/數(shù)據(jù)庫(kù)的使用會(huì)比作為消息中間件更有用
消息中間件:分布式系統(tǒng)下的生產(chǎn)者消費(fèi)者模型
一般我們不會(huì)使用Redis作為消息中間件,因?yàn)闃I(yè)界有著比Redis更優(yōu)秀的消息中間件使用!
尾言
通過(guò)上述的介紹,我們初步了解了Redis與它的使用場(chǎng)景,可以發(fā)現(xiàn),在上述介紹中充斥著大量的分布式系統(tǒng)概念,所以下一期我們一起來(lái)了解一下什么是分布式!?