對(duì)redis的理解

一 介紹

redis是一個(gè)開源的搞疗,可基于內(nèi)存也可持久化的日志型嗓蘑、KEY-VALUE數(shù)據(jù)庫,并提供多種語言的API的非關(guān)系型數(shù)據(jù)庫匿乃。傳統(tǒng)數(shù)據(jù)庫遵循ACID桩皿。而Nosql(NOT only sql)是不同于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)庫管理系統(tǒng),遵循CAP定理幢炸。


二 Redis支持的數(shù)據(jù)類型

1泄隔、String 字符串:格式 set key value? ?#redis的String可以包含任何數(shù)據(jù)。比如jpg圖片或者序列化的對(duì)象宛徊。String類型是redis最基本的數(shù)據(jù)類型佛嬉,一個(gè)鍵最大能存儲(chǔ)512MB。

2闸天、hash 哈希:格式:hmset name key1 value1 key2 value2 #redis是一個(gè)鍵值對(duì)集合暖呕。redis hash 是一個(gè)String類型的feild和value的映射表,hash 特別適用于存儲(chǔ)對(duì)象苞氮。

3湾揽、List 列表:簡單的字符串列表,按照插入順序排列。添加一個(gè)元素到列表的頭部(左邊)或者尾部(右邊)库物,

lpush name value? ?#在key 對(duì)應(yīng)list的頭部添加字符串元素??

rpush name value? #在key對(duì)應(yīng)list的尾部添加字符串元素

lrem name index key #對(duì)應(yīng)list中刪除 count個(gè)和value相同的元素

llen name #返回key對(duì)應(yīng)list的長度

4霸旗、Set 集合: sadd name value? redis的set是String類型無序集合。集合是通過哈希表實(shí)現(xiàn)的戚揭,所以添加定硝、刪除,查找的復(fù)雜度都是O(1)毫目。

5蔬啡、Zset 有序集合 : zadd name score value #redis zset和set 一樣,也是String類型元素的集合镀虐,且不允許重復(fù)箱蟆。不同的是每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè)double 類型的分?jǐn)?shù)。redis 正是通過分?jǐn)?shù)來為集合中的成員進(jìn)行從小到大的排序刮便。zset的成員是唯一的空猜,但分?jǐn)?shù)(score)是可以重復(fù)的。

三 持久化

持久化就是把內(nèi)存的數(shù)據(jù)寫到磁盤中去恨旱,防止服務(wù)器宕機(jī)了內(nèi)存數(shù)據(jù)丟失辈毯。

redis提供了2種持久化方案:RDB(默認(rèn))和AOF :


rdb是redis Database縮寫 功能核心函數(shù) rdbsave (生成RDB文件)和rdbLoad(從文件加在內(nèi)存)兩個(gè)函數(shù)

AOF是 Append only file縮寫 每當(dāng)執(zhí)行服務(wù)器(定時(shí))任務(wù)或者函數(shù)時(shí)flushAppendOnlyFile函數(shù)都會(huì)被調(diào)用,這個(gè)函數(shù)執(zhí)行以下兩個(gè)工作搜贤,aof寫入保存:write #根據(jù)條件谆沃,將aof-buf中的緩存寫入到AOF文件; save #根據(jù)條件仪芒,調(diào)用fsync或者fdatasync函數(shù)唁影,將AOF文件保存到磁盤中。存儲(chǔ)結(jié)構(gòu):內(nèi)容為redis 通訊協(xié)議(RESP)格式的命令文本存儲(chǔ)掂名。

四 RESP 据沈?


五? Redis架構(gòu)模式

單機(jī)版

特點(diǎn):簡單

缺點(diǎn):1、內(nèi)存容量有限饺蔑;2锌介、處理能力有限 ;3猾警、無法高可用


集群:主從復(fù)制

redis的復(fù)制(replication)功能允許用戶根據(jù)一個(gè)redis服務(wù)器來創(chuàng)建任意多個(gè)該服務(wù)器的復(fù)制品孔祸,其中被復(fù)制的服務(wù)器為主服務(wù)器(master),而通過復(fù)制創(chuàng)建出來的服務(wù)器復(fù)制品則為從服務(wù)器(slave)肿嘲。只要主從服務(wù)器之間的網(wǎng)絡(luò)鏈接正常融击,主從服務(wù)器兩者會(huì)具有相同的數(shù)據(jù),主服務(wù)器就會(huì)一只將發(fā)生在自己的數(shù)據(jù)更新同步給從服務(wù)器雳窟,從而一只保證主從服務(wù)器的數(shù)據(jù)相同。

特點(diǎn):master/slave 角色;master/slave 數(shù)據(jù)相同封救;降低master讀壓力拇涤,轉(zhuǎn)交到從庫

缺點(diǎn):1、有單點(diǎn)問題誉结,無法保證高可用鹅士;2、沒有解決master的寫能力惩坑;

哨兵:


redis sentinel是一個(gè)分布式系統(tǒng)中監(jiān)控 redis 主從服務(wù)器掉盅,并在主服務(wù)器下線時(shí)自動(dòng)進(jìn)行故障轉(zhuǎn)移。有3個(gè)特性:

監(jiān)控(Monitoring):sentinel會(huì)不斷的檢查你的主服務(wù)器和從服務(wù)器是否運(yùn)行正常以舒。

提醒(Notification):當(dāng)被監(jiān)控的某個(gè)redis服務(wù)器出現(xiàn)問題時(shí)趾痘,Sentinel可以通過API向管理員或者其他應(yīng)用程序發(fā)送通知。

自動(dòng)故障遷移(Automatic failover):當(dāng)一個(gè)主服務(wù)器不能正常工作時(shí)蔓钟,Sentinel會(huì)開始一次自動(dòng)故障遷移操作永票。

特點(diǎn):1、保證高可用滥沫;2侣集、監(jiān)控各個(gè)節(jié)點(diǎn);3兰绣、自動(dòng)故障遷移

缺點(diǎn):主從模式世分,切換需要時(shí)間丟數(shù)據(jù);沒有解決master寫的壓力

集群:代理模式


twemproxy是一個(gè)Twitter開源的一個(gè)redis和memcache快速/輕量級(jí) 代理服務(wù)器缀辩;Twemproxy是一個(gè)快速的單線程代理程序罚攀,支持Memcached ASCII 協(xié)議和redis協(xié)議

特點(diǎn):1、多種hash算法:MD5雌澄、CRC16斋泄、CRC32、CRC32a镐牺、hsieh等炫掐;2、支持失敗節(jié)點(diǎn)自動(dòng)刪除睬涧;3募胃、后端sharding分片邏輯對(duì)業(yè)務(wù)透明,業(yè)務(wù)方的讀寫方式和操作單個(gè)redis一致

缺點(diǎn):1畦浓、增加了新的proxy痹束,需要維護(hù)其高可用;2讶请、failover邏輯需要自己實(shí)現(xiàn)祷嘶,其本身不能支持故障的自動(dòng)轉(zhuǎn)移,可擴(kuò)展性差,進(jìn)行擴(kuò)展都需要手動(dòng)干預(yù)论巍;

集群:直連型


從redis 3.0之后版本支持redis-cluster 集群烛谊,redis-cluster 采用無中心結(jié)構(gòu),每個(gè)節(jié)點(diǎn)保存數(shù)據(jù)和整個(gè)集群狀態(tài)嘉汰,每個(gè)節(jié)點(diǎn)都和其他所有節(jié)點(diǎn)連接丹禀。

特點(diǎn):

1、無中心架構(gòu)(不存在哪個(gè)節(jié)點(diǎn)影響性能瓶頸)鞋怀,少了proxy層双泪。

2、數(shù)據(jù)按照slot存儲(chǔ)分布在多個(gè)節(jié)點(diǎn)密似,節(jié)點(diǎn)間數(shù)據(jù)共享焙矛,可動(dòng)態(tài)調(diào)整數(shù)據(jù)分布。

3辛友、可擴(kuò)展性薄扁,可線性擴(kuò)展到1000個(gè)節(jié)點(diǎn),節(jié)點(diǎn)可動(dòng)態(tài)添加或刪除废累。

4邓梅、高可用,部分節(jié)點(diǎn)不可用時(shí)邑滨,集群仍可用日缨。通過增加slave 做備份數(shù)據(jù)副本。

5掖看、實(shí)現(xiàn)故障自動(dòng)failover匣距,節(jié)點(diǎn)之間通過gossip協(xié)議交換狀態(tài)信息,用投票機(jī)制完成slave到master的角色提升哎壳。

缺點(diǎn):

1毅待、資源隔離性較差,容易出現(xiàn)相互影響的情況归榕。

2尸红、數(shù)據(jù)通過異步復(fù)制,不保證數(shù)據(jù)的強(qiáng)一致性刹泄。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末外里,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子特石,更是在濱河造成了極大的恐慌盅蝗,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姆蘸,死亡現(xiàn)場離奇詭異墩莫,居然都是意外死亡芙委,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門贼穆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來题山,“玉大人兰粉,你說我怎么就攤上這事故痊。” “怎么了玖姑?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵愕秫,是天一觀的道長。 經(jīng)常有香客問我焰络,道長戴甩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任闪彼,我火速辦了婚禮甜孤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘畏腕。我一直安慰自己缴川,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布描馅。 她就那樣靜靜地躺著把夸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪铭污。 梳的紋絲不亂的頭發(fā)上恋日,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音嘹狞,去河邊找鬼岂膳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛磅网,可吹牛的內(nèi)容都是我干的谈截。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼知市,長吁一口氣:“原來是場噩夢啊……” “哼傻盟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起嫂丙,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤娘赴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后跟啤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诽表,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唉锌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了竿奏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片袄简。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖泛啸,靈堂內(nèi)的尸體忽然破棺而出绿语,到底是詐尸還是另有隱情,我是刑警寧澤候址,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布吕粹,位于F島的核電站樟澜,受9級(jí)特大地震影響扭倾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜怒竿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一荠雕、第九天 我趴在偏房一處隱蔽的房頂上張望稳其。 院中可真熱鬧,春花似錦炸卑、人聲如沸既鞠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽损趋。三九已至,卻和暖如春椅寺,著一層夾襖步出監(jiān)牢的瞬間浑槽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國打工返帕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留桐玻,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓荆萤,卻偏偏與公主長得像镊靴,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子链韭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • NOSQL類型簡介鍵值對(duì):會(huì)使用到一個(gè)哈希表偏竟,表中有一個(gè)特定的鍵和一個(gè)指針指向特定的數(shù)據(jù),如redis敞峭,volde...
    MicoCube閱讀 3,958評(píng)論 2 27
  • 從這篇文章開始踊谋,將依次介紹Redis高可用相關(guān)的知識(shí)——持久化、復(fù)制(及讀寫分離)旋讹、哨兵殖蚕、以及集群轿衔。 本文將先說明...
    不變甄心閱讀 692評(píng)論 0 4
  • 前言 在上一篇文章中,介紹了Redis內(nèi)存模型睦疫,從這篇文章開始害驹,將依次介紹Redis高可用相關(guān)的知識(shí)——持久化、復(fù)...
    Java架構(gòu)閱讀 2,296評(píng)論 3 21
  • 在Redis的持久化中曾提到蛤育,Redis高可用的方案包括持久化宛官、主從復(fù)制(及讀寫分離)、哨兵和集群缨伊。其中持久化側(cè)重...
    不變甄心閱讀 1,493評(píng)論 0 5
  • 一摘刑、Redis高可用概述 在介紹Redis高可用之前进宝,先說明一下在Redis的語境中高可用的含義刻坊。 我們知道,在w...
    空語閱讀 1,593評(píng)論 0 2