Redis特性總覽
速度快
官方給出的數(shù)據(jù)是10w OPS,也就是每秒可以實(shí)現(xiàn)10萬(wàn)次讀寫(xiě)短荐,雖然官方給出的數(shù)據(jù)通常會(huì)偏高一些,但是從實(shí)際使用來(lái)看達(dá)到萬(wàn)級(jí)別的OPS是基本沒(méi)有問(wèn)題的叹哭,當(dāng)然這也和使用的方法以及具體的數(shù)據(jù)是有關(guān)的忍宋,這里我們不做具體討論。
Redis之所以這么快有這么幾點(diǎn)原因风罩,數(shù)據(jù)是存在內(nèi)存中糠排,源代碼使用C語(yǔ)言編寫(xiě),代碼短小精悍超升,使用的是線程模型是單線程入宦。
這里使用單線程主要是因?yàn)閮?nèi)存讀寫(xiě)速度非常快室琢,使用單線程能達(dá)到很高的性能乾闰,很多實(shí)際開(kāi)發(fā)當(dāng)中,多線程往往會(huì)成為我們并發(fā)的瓶頸盈滴。
其實(shí)速度塊最主要的原因就是內(nèi)存涯肩。無(wú)論代碼寫(xiě)的多好,或者使用什么線程模型巢钓,如果數(shù)據(jù)是存在一個(gè)比較慢的介質(zhì)當(dāng)中病苗,那性能也不會(huì)很高。
相信學(xué)過(guò)計(jì)算機(jī)專業(yè)的同學(xué)對(duì)下面這張圖一定不陌生竿报,該圖展示了計(jì)算機(jī)存儲(chǔ)的各個(gè)介質(zhì)铅乡,從上到下包括寄存器、一級(jí)緩存烈菌、二級(jí)緩存阵幸、內(nèi)存花履、本地硬盤(pán)、遠(yuǎn)程硬盤(pán)挚赊,從上到下它的速度是由快至慢诡壁,容量由小到大,價(jià)格由高到低荠割。
內(nèi)存與硬盤(pán)對(duì)比
持久化
我們知道Redis是將數(shù)據(jù)保存在內(nèi)存中妹卿,而內(nèi)存的數(shù)據(jù)不具有持久化的特性,也就是說(shuō)當(dāng)機(jī)器發(fā)生斷電時(shí)蔑鹦,是無(wú)法對(duì)內(nèi)存的數(shù)據(jù)進(jìn)行恢復(fù)的夺克,為此Redis就提供了持久化的功能。
Redis所有數(shù)據(jù)保存在內(nèi)存中嚎朽,對(duì)數(shù)據(jù)的更新將異步的保存到磁盤(pán)上铺纽。
Redis提供了RDB
和AOF
兩種方式對(duì)數(shù)據(jù)進(jìn)行持久化。
多種數(shù)據(jù)結(jié)構(gòu)
Redis提供了5種主要的數(shù)據(jù)結(jié)構(gòu):String哟忍、Hash狡门、List、Set锅很、Sorted Set
除此之外其馏,在Redis的后續(xù)版本以及迭代當(dāng)中,也提供了一些其他的(衍生的)數(shù)據(jù)結(jié)構(gòu):
BitMaps:
位圖(本質(zhì)是字符串)
HyperLogLog:
超小內(nèi)存唯一值計(jì)數(shù)(本質(zhì)是字符串)
GEO:
地理信息定位(Redis3.2提供爆安,本質(zhì)是有序集合)
支持多種客戶端語(yǔ)言
由于Redis受到了很多公司的支持叛复,以及Redis提供了一個(gè)非常簡(jiǎn)單的基于TCP的通信協(xié)議,所以說(shuō)非常多的編程語(yǔ)言都主動(dòng)去支持Redis服務(wù)器鹏控。包括但不限于以下所有語(yǔ)言致扯,所以這也是Redis非常受歡迎的原因之一
功能豐富
Redis除了提供5種主要數(shù)據(jù)結(jié)構(gòu)以外,還提供了很多其他的功能当辐,像發(fā)布訂閱可以實(shí)現(xiàn)很多消息的功能抖僵,同時(shí)還支持Lua腳本,這樣可以實(shí)現(xiàn)一些自定義命令缘揪,同時(shí)還支持簡(jiǎn)單的事務(wù)功能耍群、最后Redis也支持pipeline來(lái)提高客戶端的并發(fā)效率。
總之如果將Redis使用好的話找筝,它會(huì)像一把瑞士軍刀一樣無(wú)所不能蹈垢。
簡(jiǎn)單
Redis的單機(jī)核心代碼只有23000行,redis3.0提供了更豐富的集群分布式功能(代碼大約4-5萬(wàn)行)袖裕,如果想真正吃透Redis這個(gè)項(xiàng)目曹抬,都可以去閱讀它的源代碼,甚至有些企業(yè)可以去修改它的源代碼來(lái)實(shí)現(xiàn)自己業(yè)務(wù)的定制化急鳄。
Redis的簡(jiǎn)單還體現(xiàn)在它不依賴外部庫(kù)(like libevent)谤民,同時(shí)它是一個(gè)單線程模型堰酿,這意味著無(wú)論是服務(wù)端還是客戶端的開(kāi)發(fā)都會(huì)相對(duì)容易一些。
主從復(fù)制
Redis提供了主從復(fù)制的功能张足,也就是說(shuō)在Redis中有兩種角色触创,主服務(wù)器和從服務(wù)器,主服務(wù)器的數(shù)據(jù)可以同步到從服務(wù)器中为牍,這樣可以為高可用以及分布式提供一個(gè)很好的基礎(chǔ)哼绑。
高可用、分布式
本身Redis的單點(diǎn)或者說(shuō)Redis的主從復(fù)制模型對(duì)于實(shí)現(xiàn)一個(gè)高可用的數(shù)據(jù)庫(kù)來(lái)說(shuō)是比較困難的甚至是幾乎不可能的碉咆。
因此Redis在2.8版本當(dāng)中提供了Redis-Sentinel
這樣的功能來(lái)支持高可用抖韩。
其次對(duì)于一個(gè)數(shù)據(jù)庫(kù)來(lái)說(shuō),分布式功能對(duì)于當(dāng)下的企業(yè)也是非常重要的疫铜,所以Redis從3.0版本開(kāi)始正式支持分布式帽蝶,也就是Redis-Cluster