Redis+Mysql模式和内存+硬盘模式的异同
學(xué)習(xí)任何新知識(shí),都是一個(gè)循序漸進(jìn)的過(guò)程,從剛開(kāi)始的懵懂無(wú)知,到簡(jiǎn)單熟悉,然后突然的徹悟,成果讓人欣喜若狂,心情也會(huì)快樂(lè)很久。
redis+mysql和內(nèi)存+硬盤類似的地方
首先看圖
首先,我們知道,mysql是持久化存儲(chǔ),存放在磁盤里面,檢索的話,會(huì)涉及到一定的IO,為了解決這個(gè)瓶頸,于是出現(xiàn)了緩存,比如現(xiàn)在用的最多的 memcached(簡(jiǎn)稱mc)。首先,用戶訪問(wèn)mc,如果未命中,就去訪問(wèn)mysql,之后像內(nèi)存和硬盤一樣,把數(shù)據(jù)復(fù)制到mc一部分。
redis和mc都是緩存,并且都是駐留在內(nèi)存中運(yùn)行的,這大大提升了高數(shù)據(jù)量web訪問(wèn)的訪問(wèn)速度。然而mc只是提供了簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu),比如 string存儲(chǔ);redis卻提供了大量的數(shù)據(jù)結(jié)構(gòu),比如string、list、set、hashset、sorted set這些,這使得用戶方便了好多,畢竟封裝了一層實(shí)用的功能,同時(shí)實(shí)現(xiàn)了同樣的效果,當(dāng)然用redis而慢慢舍棄mc。
內(nèi)存和硬盤的關(guān)系,硬盤放置主體數(shù)據(jù)用于持久化存儲(chǔ),而內(nèi)存則是當(dāng)前運(yùn)行的那部分?jǐn)?shù)據(jù),CPU訪問(wèn)內(nèi)存而不是磁盤,這大大提升了運(yùn)行的速度,當(dāng)然這是基于程序的局部化訪問(wèn)原理。
推理到redis+mysql,它是內(nèi)存+磁盤關(guān)系的一個(gè)映射,mysql放在磁盤,redis放在內(nèi)存,這樣的話,web應(yīng)用每次只訪問(wèn)redis,如果沒(méi)有找到的數(shù)據(jù),才去訪問(wèn)Mysql。
然而redis+mysql和內(nèi)存+磁盤的用法最好是不同的。
redis+mysql和內(nèi)存+硬盤運(yùn)行模式是不同的
了解過(guò)內(nèi)存和硬盤運(yùn)行過(guò)程的同學(xué),都知道他倆之間通過(guò)頁(yè)面置換算法進(jìn)行調(diào)度,也就是說(shuō)每次是按塊將數(shù)據(jù)從硬盤換入或者換出內(nèi)存,比如硬盤有一個(gè)100G的文件,如果要讀這個(gè)文件,內(nèi)存中每次只放該文件10MB的一部分(圖1中的小塊就是這個(gè)意思)。
于是有人會(huì)猜測(cè),mysql存儲(chǔ)了100G的數(shù)據(jù),用戶訪問(wèn)mysql的時(shí)候,把10MB數(shù)據(jù)拷貝到redis,比如select一個(gè)id=1000的數(shù) 據(jù),那就把id=10到id=9999的數(shù)據(jù)放到redis,用于下次訪問(wèn)。可是關(guān)鍵在于mysql數(shù)據(jù)的訪問(wèn),并不是文件這種局部性原理,不同的用戶訪 問(wèn)的是完全不同的東西,跟id的次序沒(méi)有任何關(guān)系。
其實(shí)redis的強(qiáng)項(xiàng)也不在此,它擅長(zhǎng)保存元數(shù)據(jù)類的數(shù)據(jù),也就是說(shuō)描述性的而不是數(shù)據(jù)本身
就此我假定了redis的幾個(gè)應(yīng)用場(chǎng)景,請(qǐng)大家批評(píng)指正:
存放計(jì)數(shù)器的數(shù)字
存放檢索關(guān)鍵詞的id列表(不放內(nèi)容)
存放用戶之間的follow關(guān)系(非用戶信息)
存放簡(jiǎn)單的靜態(tài)Html,而非所有的CSS和JS
總之發(fā)現(xiàn),就是redis大量存放的是數(shù)據(jù)表的索引字段,如果剛好用到符合條件的信息,可以根據(jù)索引字段,再去 mysql查找,比如搜索關(guān)鍵詞”redis”,第一步我們?nèi)ysql獲取redis相關(guān)的信息返回給用戶,然后記錄一個(gè)zset,將redis作為名 字,將搜索到的每個(gè)Id以先后順序存在里面,那么下次有人搜索”redis”,直接根據(jù)該列表去mysql找對(duì)應(yīng)id的信息就行了,這已經(jīng)大大提升了訪問(wèn) 速度。
下面是一個(gè)檢索的流程圖:
總結(jié)
以上是生活随笔為你收集整理的Redis+Mysql模式和内存+硬盘模式的异同的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: $.ajax json 在本
- 下一篇: mysql cmd终端服务无法启动