大學(xué)的時候我們都學(xué)過一種數(shù)據(jù)結(jié)構(gòu)——哈希表,查詢效率非常高,復(fù)雜度為 O(1),通常關(guān)注查詢性能的地方都會用到這個東西。
http://wiki.jikexueyuan.com/project/redis/images/redis.png" alt="" />
緩存系統(tǒng),就是一個哈希表。只是通常哈希表的場景都是在本機(jī),把哈希表放到遠(yuǎn)程的機(jī)器上,本機(jī)通過網(wǎng)絡(luò)訪問(增刪查改)哈希表,就成了現(xiàn)在的緩存系統(tǒng)了。
我們還可以嘗試強(qiáng)化這個哈希表,比如支持存儲各種類型的數(shù)據(jù);存儲有價值數(shù)據(jù)的哈希表時,需要定時備份這個哈希表;訪問的頻率太大了,需要將數(shù)據(jù)分散到多個遠(yuǎn)程的哈希表中;遠(yuǎn)程的哈希表節(jié)點(diǎn)多了,又該如何管理他們等等。
所以緩存系統(tǒng)只是哈希表的一種延伸,它只是一種數(shù)據(jù)結(jié)構(gòu)的應(yīng)用。同樣,Redis 也是。
這一章帶大家大概瀏覽一下 Redis。
通常,在系統(tǒng)中,我們會把數(shù)據(jù)交由數(shù)據(jù)庫來存儲,但傳統(tǒng)的數(shù)據(jù)庫增刪查改的性能較差,且比較復(fù)雜。根據(jù) 80/20 法則,百分之八十的業(yè)務(wù)訪問集中在百分之二十的數(shù)據(jù)上。是否可以有一個存在于物理內(nèi)存中的數(shù)據(jù)中間層,來緩存一些常用的數(shù)據(jù),解決傳統(tǒng)數(shù)據(jù)庫數(shù)據(jù)讀寫性能問題。常用的數(shù)據(jù)都存儲在內(nèi)存中,讀寫性能非??捎^。
http://wiki.jikexueyuan.com/project/redis/images/redis1.png" alt="" />
這種思維在計算機(jī)中很常見,之前學(xué)習(xí)計算機(jī)系統(tǒng)的時候就有見過這張圖:越往上層的存儲設(shè)備,存儲的速度就會更快。諸如,Redis, Memcache 是將可訪問的數(shù)據(jù)存儲在內(nèi)存中,可見它們可以彌補(bǔ)傳統(tǒng)數(shù)據(jù)庫的不足。
http://wiki.jikexueyuan.com/project/redis/images/redis2.png" alt="" />
包括 Redis/Memcache 這樣的 key-value 內(nèi)存存儲系統(tǒng),非常適合于讀多寫少的業(yè)務(wù)場景,而 Redis 是一個基于多種數(shù)據(jù)結(jié)構(gòu)的內(nèi)存存儲系統(tǒng),讓緩存系統(tǒng)更加好玩。