redis簡(jiǎn)介
- redis是一種基于鍵值對(duì)key芒帕、value的NoSQL內(nèi)存數(shù)據(jù)庫(kù)丰介,同時(shí)它會(huì)把內(nèi)存的數(shù)據(jù)利用快照和日志的形式保存到硬盤(pán)上,即使發(fā)生斷電带膀,內(nèi)存中的數(shù)據(jù)也不會(huì)完全丟失(會(huì)丟失未同步到硬盤(pán)上的數(shù)據(jù))。redis執(zhí)行命令的速度非陈着矗快敛纲,官方給出的數(shù)據(jù)是讀寫(xiě)性能可以達(dá)到10w/s剂癌。這主要得益于它的數(shù)據(jù)是放在內(nèi)存中的珍手,同時(shí)redis基于c語(yǔ)言實(shí)現(xiàn),這種貼近操作系統(tǒng)的語(yǔ)言寡具,執(zhí)行速度相對(duì)會(huì)更快稚补。此外,redis的單線程架構(gòu)厦坛,預(yù)防了多線程可能產(chǎn)生的并發(fā)競(jìng)爭(zhēng)問(wèn)題乍惊。
- redis全稱是Remote Dictionary Server润绎,它主要提供了字符串、哈希表莉撇、列表、集合其障、有序集合這5中數(shù)據(jù)結(jié)構(gòu)涂佃,并提供了鍵過(guò)期功能,可以用來(lái)實(shí)現(xiàn)緩存抚笔。提供了發(fā)布訂閱功能殊橙,可以用來(lái)實(shí)現(xiàn)消息系統(tǒng),還有流水線(Pipeline)功能叠纹,這樣客戶端能夠一批命令一次性傳到redis誉察,能減少網(wǎng)絡(luò)的開(kāi)銷(xiāo)惹谐。
- 把數(shù)據(jù)放在內(nèi)存始終是不夠安全,一旦斷電或者進(jìn)程崩潰數(shù)據(jù)就會(huì)丟失鸿秆,對(duì)此redis提供了兩種持久化方式卿叽,rdb和aof考婴,redis可以使用兩種策略將內(nèi)存的數(shù)據(jù)保存到硬盤(pán)中催烘。redis還提供了復(fù)制功能,實(shí)現(xiàn)了多個(gè)相同數(shù)據(jù)的redis副本喳钟,這進(jìn)一步保證了數(shù)據(jù)的安全可靠。redis從2.8版本正式提供了redis sentinel蔽午,它能夠?qū)崿F(xiàn)redis節(jié)點(diǎn)的故障發(fā)現(xiàn)和故障自動(dòng)轉(zhuǎn)移酬蹋,在3.0版本提供了redis cluster抽莱,它是redis真正的分布式實(shí)現(xiàn)食铐,提供了高可用(自動(dòng)進(jìn)行主從切換進(jìn)行故障轉(zhuǎn)移), 讀寫(xiě)和容量的拓展性(可動(dòng)態(tài)向集群增加虐呻、減少節(jié)點(diǎn)斟叼,實(shí)現(xiàn)水平擴(kuò)縮容)。
redis的使用場(chǎng)景
- 用作緩存朗涩。 緩存機(jī)制幾乎在所有的大型網(wǎng)站都有使用谢床,redis提供了鍵值過(guò)期時(shí)間設(shè)置厘线,并提供了靈活控制最大內(nèi)存和內(nèi)存溢出后的淘汰策略皆的,非常方便用于實(shí)現(xiàn)網(wǎng)站的緩存费薄。
- 排行榜楞抡、計(jì)數(shù)器系統(tǒng)。 redis提供了列表和有序集合數(shù)據(jù)結(jié)構(gòu)召廷,并且天然支持計(jì)數(shù)功能,合理運(yùn)用這些數(shù)據(jù)結(jié)構(gòu)能很好的服務(wù)于排行榜和計(jì)數(shù)器系統(tǒng)先紫。
- 消息隊(duì)列系統(tǒng)筹煮。 消息隊(duì)列系統(tǒng)具有業(yè)務(wù)解耦遮精、非實(shí)時(shí)業(yè)務(wù)削峰等特性,可以說(shuō)是一個(gè)大型網(wǎng)站必備的基礎(chǔ)組件, redis提供了發(fā)布與訂閱和阻塞隊(duì)列的功能本冲,雖然和專業(yè)的消息隊(duì)列比還不夠強(qiáng)大准脂,但基本可以滿足一般的消息隊(duì)列功能。
redis不適合干啥
- 從數(shù)據(jù)規(guī)模角度上看檬洞, redis更適合存放小規(guī)模數(shù)據(jù)狸膏。redis的數(shù)據(jù)是放在內(nèi)存中,雖然現(xiàn)在內(nèi)存已經(jīng)足夠便宜添怔,但如果數(shù)據(jù)量非常大湾戳,比如幾億用戶的行為數(shù)據(jù),若使用redis來(lái)存儲(chǔ)澎灸,經(jīng)濟(jì)成本還是相當(dāng)高的院塞。
- 從數(shù)據(jù)冷熱角度看拦止,例如視頻網(wǎng)站,視頻信息基本上各個(gè)業(yè)務(wù)線都是經(jīng)常操作的數(shù)據(jù)(熱數(shù)據(jù)), 而用戶的觀看記錄不一定是經(jīng)常要訪問(wèn)的數(shù)據(jù)(冷數(shù)據(jù))榴徐,如果將這些冷數(shù)據(jù)放到redis上存儲(chǔ)是對(duì)內(nèi)存的一種浪費(fèi),而熱數(shù)據(jù)放在redis里可以加快讀寫(xiě)袱贮,也可以減輕后端存儲(chǔ)的負(fù)載。
redis的安裝
? redis能夠兼容絕大部分的posix系統(tǒng),例如linux常柄,osx,freebsd,其中比較典型的是linux操作系統(tǒng)品姓。 在linux安裝軟件,一種方法是通過(guò)各個(gè)操作系統(tǒng)的軟件管理軟件進(jìn)行安裝,如ubuntu的apt友驮, 由于redis的更新速度較快,這些管理工具不一定能安裝到最新的版本。所以推薦另一種方式:使用源碼安裝,源碼安裝redis也不復(fù)雜6步即可完成算柳, 以3.0.7版本為例:
- wget http://download.redis.io/releases/redis-3.0.7.tar.gz
- tar xvf redis-3.0.7.tar.gz // 解壓
- ln -s redis-3.0.7 redis // 建立軟連接 指向redis-3.0.7何荚,這樣是為了不把redis目錄固定在指定版本上妥衣,有利于版本升級(jí)
- cd redis
- make // 編譯
- make install // 把編譯后的二進(jìn)制文件放到指定目錄下 如/usr/local/bin蜂筹, 方便在任何目錄下執(zhí)行redis命令
配置、操作redis
??redis安裝后, 在src和/usr/local/bin目錄下多了幾個(gè)以redis開(kāi)頭的可執(zhí)行文件,它們便是redis shell疆瑰, 用于啟動(dòng)跟衅、停止掰读、檢測(cè)he修復(fù)redis的持久化文件以及檢測(cè)redis性能雇初。
image.png
- 啟動(dòng)redis刊橘。 有三種方法啟動(dòng)redis: 默認(rèn)配置攒庵、運(yùn)行配置、配置文件啟動(dòng)。 直接使用redis-server啟動(dòng)redis就是使用默認(rèn)配置(redis目錄下的redis.conf文件)僚祷。 redis-server --configKey1 configValue1 --configKey2 configValue2 , 屬于運(yùn)行配置感昼。將配置寫(xiě)到指定文件里蜕琴,redis-server redis.conf
image.png
- redis命令行客戶端雏搂。 redis-cli -h {host} -p {port}是一種交互的方式芙沥。 redis-cli -h {host} -p {port} {command} 可以直接得到命令的返回結(jié)果配紫。 注意: 如果-h沒(méi)有參數(shù) 默認(rèn)連接127.0.0.1植袍,-p如果沒(méi)有參數(shù)厅篓,默認(rèn)為6379端口。
- 停止redis服務(wù), redis提供了shutdown命令來(lái)停止redis服務(wù)叼耙。 redis-cli shutdown倾贰。這種關(guān)閉進(jìn)程的方式會(huì)先斷開(kāi)客戶端的連接,然后生成持久化文件,是一種相對(duì)優(yōu)雅的關(guān)閉方式。如果通過(guò)kill -9 強(qiáng)殺redis服務(wù), 不但不會(huì)做持久化操作,還會(huì)造成緩沖區(qū)等資源不能優(yōu)雅關(guān)閉,可能導(dǎo)致丟失數(shù)據(jù)。 shutdown還有一個(gè)參數(shù)讼呢,表示是否在關(guān)閉redis服務(wù)前生成持久化文件础爬, redis-cli shutdown save|nosave 供炎。
總結(jié)
本文介紹了redis的基本概念竭钝、使用場(chǎng)景庇茫、安裝以及操作顷霹,屬于概述性質(zhì)的炭臭, 為了讓大家對(duì)redis有個(gè)整體的認(rèn)識(shí),更多的內(nèi)容和細(xì)節(jié)會(huì)在后面的文章一一介紹界拦。