Redis 它是什嗎?它用來做什嗎?它的優勢與短板如何?,redis做什麼
問題導讀: 1.Redis 是什嗎? 2 Redis用來做什嗎? 3 Redis的優點? 4 Redis的缺點?
閱讀目的: 對什麼是記憶體型資料庫有概念性的認知。?
Redis 是什嗎?
通常而言目前的資料庫分類有幾種,包括 SQL/NSQL,,關聯式資料庫,鍵值資料庫等等 等,分類的標準也不以,Redis本質上也是一種鍵值資料庫的,但它在保持鍵值資料庫簡單快捷特點的同時,又吸收了部分關聯式資料庫的優點。從而使它的位置處於關聯式資料庫和鍵值數 據庫之間。Redis不僅能儲存Strings類型的資料,還能儲存Lists類型(有序)和Sets類型(無序)的資料,而且還能完成排序(SORT) 等進階功能,在實現INCR,SETNX等功能的時候,保證了其操作的原子性,除此以外,還支援主從複製等功能。
更為詳細的描述請參考如下:
http://code.google.com/p/redis/wiki/index
Redis官方也同樣提供了一個名為Retwis的項目代碼,可以對照著官方學習。
2 Redis用來做什嗎?
通常局限點來說,Redis也以訊息佇列的形式存在,作為內嵌的List存在,滿足即時的高並發需求。而通常在一個電商類型的資料處理過程之中,有關商品,熱銷,推薦排序的隊列,通常存放在Redis之中,期間也包擴Storm對於Redis列表的讀取和更新。
3 Redis的優點
效能極高 – Redis能支援超過 100K+ 每秒的讀寫頻率。
豐富的資料類型 – Redis支援二進位案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 資料類型操作。
原子 – Redis的所有操作都是原子性的,同時Redis還支援對幾個操作全並後的原子性執行。
豐富的特性 – Redis還支援 publish/subscribe, 通知, key 到期等等特性。
4 Redis的缺點
是資料庫容量受到實體記憶體的限制,不能用作海量資料的高效能讀寫,因此Redis適合的情境主要局限在較小資料量的高效能操作和運算上。
總結: Redis受限於特定的情境,專註於特定的領域之下,速度相當之快,目前還未找到能替代使用產品。 |
在使用緩衝的時候,redis比memcached具有更多的優勢,並且支援更多的資料類型。
Redis是什嗎?兩句話可以做下概括:
1. 是一個完全開源免費的key-value記憶體資料庫
2. 通常被認為是一個資料結構伺服器,主要是因為其有著豐富的資料結構 strings、map、 list、sets、 sorted sets
Redis不是什嗎?同樣從兩個方面來做下對比:
1. 不是sql server、mySQL等關係型資料庫,主要原因是:
. redis目前還只能作為小資料量儲存(全部資料能夠載入在記憶體中) ,海量資料存放區方面並不是redis所擅長的領域
. 設計、實現方法很不一樣.關係型資料庫通過表來儲存資料,通過SQL來查詢資料。而Redis通上述五種資料結構來儲存資料,通過命令 來查詢資料
2. 不是Memcached等緩衝系統,主要原因有以下幾個:
.網路IO模型方面:Memcached是多線程,分為監聽線程、worker線程,引入鎖,帶來了效能損耗。Redis使用單線程的IO複用模型,將速度優勢發揮到最大,也提供了較簡單的計算功能
.記憶體管理方面:Memcached使用預分配的記憶體池的方式,帶來一定程度的空間浪費 並且在記憶體仍然有很大空間時,新的資料也可能會被剔除,而Redis使用現場申請記憶體的方式來儲存資料,不會剔除任何非臨時資料 Redis更適合作為儲存而不是cache
.資料的一致性方面:Memcached提供了cas命令來保證.而Redis提供了事務的功能,可以保證一串 命令的原子性,中間不會被任何操作打斷
. 儲存方式方面:Memcached只支援簡單的key-value儲存,不支援枚舉,不支援持久化和複製等功能 一句話小結一下:Redis是一個高效能的key-value資料庫。 redis的出現,很大程度補償了memcached這類key/value儲存的不足,在部分場合可以對關聯式資料庫起到很好的補充作用。
Redis有什麼用?只有瞭解了它有哪些特性,我們在用的時候才能揚長避短,為我們所用:
1. 速度快:使用標準C寫,所有資料都在記憶體中完成,讀寫速度分別達到10萬/20萬
2. 持久化:對資料的更新採用Copy-on-write技術,可以非同步地儲存到磁碟上,主要有兩種策略,一是根據時間,更新次數的快照(save 300 10 )二是基於語句追加方式(Append-only file,aof)
3. 自動操作:對不同資料類型的操作都是自動的,很安全
4. 快速的主--從複製,官方提供了一個資料,Slave在21秒即完成了對Amazon網站10G key set的複製。
5. Sharding技術: 很容易將資料分布到多個Redis執行個體中,資料庫的擴充是個永恒的話題,在關係型資料庫中,主要是以添加硬體、以分區為主要技術形式的縱向擴充解決了很多的應用情境,但隨著web2.0、移動互連網、雲端運算等應用的興起,這種擴充模式已經不太適合了,所以近年來,像採用主從配置、資料庫複寫形式的,Sharding這種技術把負載分布到多個特理節點上去的橫向擴充方式用處越來越多。
這裡對Redis資料庫做下小結:
1. 提高了DB的可擴充性,只需要將新加的資料放到新加的伺服器上就可以了
2. 提高了DB的可用性,隻影響到需要訪問的shard伺服器上的資料的使用者
3. 提高了DB的可維護性,對系統的升級和配置可以按shard一個個來搞,對服務產生的影響較小
4. 小的資料庫存的查詢壓力小,查詢更快,效能更好
寫到這裡,可能就會有人急不可待地想用它了,那怎麼用呢?可以直接到官方文檔,裡面幫我們整理好了各個語言環境下的用戶端,主要有Ruby、Python、 PHP、Perl、Lua、Java、C#....有幾種語言,我也沒見過,所以就不多說了,你懂的....
最後,把我使用過程中的一些 經驗傳承,做個小結:
1. 要進行Master-slave配置,出現服務故障時可以支援切換。
2. 在master側禁用資料持久化,只需在slave上配置資料持久化。
3. 實體記憶體+虛擬記憶體不足,這個時候dump一直死著,時間久了機器掛掉。這個情況就是災難!
4. 當Redis實體記憶體使用超過記憶體總容量的3/5時就會開始比較危險了,就開始做swap,記憶體片段大
5. 當達到最大記憶體時,會清空帶有到期時間的key,即使key未到到期時間.
6. redis與DB同步寫的問題,先寫DB,後寫redis,因為寫記憶體基本上沒有問題
-
頂
-
2
-
踩
-
0
查看評論