1辫樱、什么是Redis?
Redis是一個(gè)基于內(nèi)存的高性能key-value數(shù)據(jù)庫(kù)合是,它通常被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器咒唆。它是一種基于鍵值對(duì)(key-value)的NoSQL數(shù)據(jù)庫(kù)冒嫡,與很多鍵值對(duì)數(shù)據(jù)庫(kù)不同的是,Redis中的值可以是由string(字符串)熏矿、hash(哈希)已骇、list(列表)、set(集合)票编、zset(有序集合)褪储、Bitmaps(位圖)、HyperLogLog慧域、GEO(地理信息定位)等多種數(shù)據(jù)結(jié)構(gòu)和算法組成鲤竹,因此
Redis可以滿足很多的應(yīng)用場(chǎng)景,而且因?yàn)镽edis會(huì)將所有數(shù)據(jù)都存放在內(nèi)存中昔榴,所以它的讀寫性能非常驚人辛藻。
不僅如此,Redis還可以將內(nèi)存的數(shù)據(jù)利用快照和日志的形式保存到硬盤上互订,這樣在發(fā)生類似斷電或者機(jī)器故障的時(shí)候吱肌,內(nèi)存中的數(shù)據(jù)不會(huì)“丟失”。除了上述功能以外仰禽,Redis還提供了鍵過期氮墨、發(fā)布訂閱、事務(wù)吐葵、流水線规揪、Lua腳本等附加功能。
2温峭、為什么使用redis猛铅?
在項(xiàng)目中使用Redis,主要是從兩個(gè)角度去考慮:性能和并發(fā)诚镰,雖然Redis還可以做分布式鎖等其他功能(該功能可以有其他中間件(如zookpeer等)代替)奕坟。
A)速度快
Redis的所有數(shù)據(jù)都是存放在內(nèi)存中的。
Redis是用C語(yǔ)言實(shí)現(xiàn)的(一般來說C語(yǔ)言實(shí)現(xiàn)的程序“距離”操作系統(tǒng)更近清笨,執(zhí)行速度相對(duì)會(huì)更快)
Redis使用了單線程架構(gòu)月杉,預(yù)防了多線程可能產(chǎn)生的競(jìng)爭(zhēng)問題。
B)基于鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu)服務(wù)器
Redis提供了5種數(shù)據(jù)結(jié)構(gòu):字符串抠艾、哈希苛萎、列表、集合检号、有序集合腌歉,同時(shí)在字符串的基礎(chǔ)之上演變出了位圖(Bitmaps)和HyperLogLog兩種神奇的“數(shù)據(jù)結(jié)構(gòu)”,并且隨著LBS(Location Based Service齐苛,基于位置服務(wù))的不斷發(fā)展翘盖,Redis3.2版本中
加入有關(guān)GEO(地理信息定位)的功能,在這些數(shù)據(jù)結(jié)構(gòu)的幫助下凹蜂,開發(fā)者可以開發(fā)出各種“有意思”的應(yīng)用馍驯。
C)豐富的功能
提供鍵過期功能,可以用來實(shí)現(xiàn)緩存玛痊。
提供發(fā)布訂閱功能汰瘫,可以用來實(shí)現(xiàn)消息系統(tǒng)。
支持Lua腳本功能擂煞,可以利用Lua創(chuàng)造出新的Redis命令混弥。
提供簡(jiǎn)單的事務(wù)功能,能在一定程度上保證事務(wù)特性对省。
提供流水線功能蝗拿,客戶端能將一批命令一次性傳到Redis,減少網(wǎng)絡(luò)開銷官辽。
D)簡(jiǎn)單穩(wěn)定
Redis的源碼少蛹磺,使用單線程模型,不需要依賴于操作系統(tǒng)中的類庫(kù)同仆,而且自己實(shí)現(xiàn)了事件處理的相關(guān)功能萤捆。
E)客戶端語(yǔ)言多
Redis提供了簡(jiǎn)單的TCP通信協(xié)議,很多編程語(yǔ)言可以很方便地接入到Redis俗批,例如Java俗或、PHP、Python岁忘、C辛慰、C++、Nodejs等干像。
F)持久化
將數(shù)據(jù)放在內(nèi)存中是不安全的帅腌,一旦發(fā)生斷電或者機(jī)器故障驰弄,重要的數(shù)據(jù)可能就會(huì)丟失,因此Redis提供了兩種持久化方式:RDB和AOF速客,即可以用兩種策略將內(nèi)存的數(shù)據(jù)保存到硬盤中戚篙,這樣就保證了數(shù)據(jù)的可持久性。
G)主從復(fù)制
Redis提供了復(fù)制功能溺职,實(shí)現(xiàn)了多個(gè)相同數(shù)據(jù)的Redis副本岔擂,復(fù)制功能是分布式Redis的基礎(chǔ)。
H)高可用和分布式
Redis從2.8版本正式提供了高可用實(shí)現(xiàn)Redis Sentinel浪耘,它能夠保證Redis節(jié)點(diǎn)的故障發(fā)現(xiàn)和故障自動(dòng)轉(zhuǎn)移乱灵。
Redis從3.0版本正式提供了分布式實(shí)現(xiàn)Redis Cluster,它是Redis真正的分布式實(shí)現(xiàn)七冲,提供了高可用痛倚、讀寫和容量的擴(kuò)展性。
3澜躺、Redis可以做什么状原?不可以做什么?
Redis可以做緩存苗踪、排行榜系統(tǒng)颠区、計(jì)數(shù)器應(yīng)用、社交網(wǎng)絡(luò)通铲、消息隊(duì)列系統(tǒng)等等毕莱。
Redis不建議做視頻類網(wǎng)站,單純站在數(shù)據(jù)冷熱的角度上看颅夺,視頻信息屬于熱數(shù)據(jù)朋截,用戶觀看記錄屬于冷數(shù)據(jù)。如果將這些冷數(shù)據(jù)放在Redis中吧黄,基本上是對(duì)于內(nèi)存的一種浪費(fèi)部服,但是對(duì)于一些熱數(shù)據(jù)可以放在Redis中加速讀寫,也可以減輕后端存儲(chǔ)的負(fù)載拗慨,可以說是事半功倍廓八。
總之,Redis使用場(chǎng)景赵抢,不是單純的這么簡(jiǎn)單區(qū)分即可剧蹂,而需要綜合性考慮。
4烦却、如何在Windows系統(tǒng)下下載安裝Redis呢宠叼?
官網(wǎng):http://redis.io/download
我的系統(tǒng)是Windows8,啟動(dòng)如下:
Windows+R -- 打開cmd命令
E: -- 進(jìn)入Redis所在磁盤
cd Redis --進(jìn)入Redis目錄
redis-server redis.windows.conf -- 出現(xiàn)下圖其爵,說明啟動(dòng)成功:
這里需注意冒冬,雖然啟動(dòng)了redis伸蚯,但是只要一關(guān)閉cmd窗口,redis就會(huì)消失简烤。所以可以把redis設(shè)置成windows下的服務(wù)朝卒,命令如下:
redis-server --service-install redis.windows-service.conf --loglevel verbose
執(zhí)行命令之后,如下圖:
5乐埠、Linux系統(tǒng)安裝Linux
官網(wǎng):http://redis.io/download
1、下載源碼囚企,解壓縮后編譯源碼丈咐,以3.0.7版本為例:
$ wget http://download.redis.io/releases/redis-3.0.7.tar.gz
$ tar xzf redis-3.0.7.tar.gz
$ ln -s redis-3.0.7 redis
$ cd redis
$ make
1)下載Redis指定版本的源碼壓縮包到當(dāng)前目錄。
2)解壓縮Redis源碼壓縮包龙宏。
3)建立一個(gè)redis目錄的軟連接棵逊,指向redis-3.0.7。
4)進(jìn)入redis目錄银酗。
5)編譯(編譯之前確保操作系統(tǒng)已經(jīng)安裝gcc)辆影。
2、編譯完成后黍特,在src目錄下蛙讥,有四個(gè)可執(zhí)行文件redis-server、redis-benchmark灭衷、redis-cli和redis.conf次慢,然后拷貝到一個(gè)目錄下。
mkdir /usr/redis
cp redis-server /usr/redis
cp redis-benchmark /usr/redis
cp redis-cli /usr/redis
cp redis.conf /usr/redis
cd /usr/redis
3翔曲、啟動(dòng)Redis服務(wù)迫像。
$ redis-server redis.conf
4、然后用客戶端測(cè)試一下是否啟動(dòng)成功瞳遍。
$ redis-cli
redis> set foo bar
OK
redis> get foo
"bar"
6闻妓、Redis重大版本
Redis借鑒了Linux操作系統(tǒng)對(duì)于版本號(hào)的命名規(guī)則:版本號(hào)第二位如果
是奇數(shù),則為非穩(wěn)定版本(例如2.7掠械、2.9由缆、3.1),如果是偶數(shù)猾蒂,則為穩(wěn)定版
本(例如2.6犁功、2.8、3.0婚夫、3.2)浸卦。當(dāng)前奇數(shù)版本就是下一個(gè)穩(wěn)定版本的開發(fā)版
本,例如2.9版本是3.0版本的開發(fā)版本案糙。所以我們?cè)谏a(chǎn)環(huán)境通常選取偶數(shù)
版本的Redis限嫌,如果對(duì)于某些新的特性想提前了解和使用靴庆,可以選擇最新的
奇數(shù)版本。