Redis的诞生历程
從一個(gè)故事開始
08 年的時(shí)候有一個(gè)意大利西西里島的小伙子,筆名antirez(http://invece.org/),創(chuàng)建了一個(gè)訪客信息網(wǎng)站LLOOGG.COM。有的時(shí)候我們需要知道網(wǎng)站的訪問情況,比如訪客的IP、操作系統(tǒng)、瀏覽器、使用的搜索關(guān)鍵詞、所在地區(qū)、訪問的網(wǎng)頁地址等等。在國內(nèi),有很多網(wǎng)站提供了這個(gè)功能,比如CNZZ,百度統(tǒng)計(jì),國外也有谷歌的GoogleAnalytics。我們不用自己寫代碼去實(shí)現(xiàn)這個(gè)功能,只需要在全局的footer 里面嵌入一段JS 代碼就行了,當(dāng)頁面被訪問的時(shí)候,就會自動把訪客的信息發(fā)送到這些網(wǎng)站統(tǒng)計(jì)的服
務(wù)器,然后我們登錄后臺就可以查看數(shù)據(jù)了。
LLOOGG.COM 提供的就是這種功能,它可以查看最多10000 條的最新瀏覽記錄。
這樣的話,它需要為每一個(gè)網(wǎng)站創(chuàng)建一個(gè)列表(List),不同網(wǎng)站的訪問記錄進(jìn)入到不同的列表。如果列表的長度超過了用戶指定的長度,它需要把最早的記錄刪除(先進(jìn)先出)。
當(dāng)LLOOGG.COM 的用戶越來越多的時(shí)候,它需要維護(hù)的列表數(shù)量也越來越多,這種記錄最新的請求和刪除最早的請求的操作也越來越多。LLOOGG.COM 最初使用的數(shù)據(jù)庫是MySQL,可想而知,因?yàn)槊恳淮斡涗浐蛣h除都要讀寫磁盤,因?yàn)閿?shù)據(jù)量和并發(fā)量
太大,在這種情況下無論怎么去優(yōu)化數(shù)據(jù)庫都不管用了。
考慮到最終限制數(shù)據(jù)庫性能的瓶頸在于磁盤,所以antirez 打算放棄磁盤,自己去實(shí)現(xiàn)一個(gè)具有列表結(jié)構(gòu)的數(shù)據(jù)庫的原型,把數(shù)據(jù)放在內(nèi)存而不是磁盤,這樣可以大大地提升列表的push 和pop 的效率。antirez 發(fā)現(xiàn)這種思路確實(shí)能解決這個(gè)問題,所以用C 語言重寫了這個(gè)內(nèi)存數(shù)據(jù)庫,并且加上了持久化的功能,09 年,Redis 橫空出世了。從最開始只支持列表的數(shù)據(jù)庫,到現(xiàn)在支持多種數(shù)據(jù)類型,并且提供了一系列的高級特性,Redis 已經(jīng)成為一個(gè)在全世界被廣泛使用的開源項(xiàng)目。
為什么叫REDIS 呢?它的全稱是REmote DIctionary Service,直接翻譯過來是遠(yuǎn)程字典服務(wù)。
從Redis 的誕生歷史我們看到了,在某些場景中,關(guān)系型數(shù)據(jù)庫并不適合用來存儲我們的Web 應(yīng)用的數(shù)據(jù)。那么,關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫,或者說SQL 和NoSQL,到底有什么不一樣呢?
?
總結(jié)
以上是生活随笔為你收集整理的Redis的诞生历程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 注册式单例
- 下一篇: SQL 与NoSQL