全面解讀NoSQL數(shù)據(jù)庫(kù)Redis的核心技術(shù)與應(yīng)用實(shí)踐

互聯(lián)網(wǎng)和Web的蓬勃發(fā)展正在改變著我們的世界齿尽,隨著互聯(lián)網(wǎng)的不斷發(fā)展和壯大继榆,企業(yè)數(shù)據(jù)規(guī)模越來(lái)越大,并發(fā)量越來(lái)越高灌曙,關(guān)系數(shù)據(jù)庫(kù)無(wú)法應(yīng)對(duì)新的負(fù)載壓力菊碟,隨著Hadoop节芥,Cassandra在刺,MongoDB,Redis等NoSQL數(shù)據(jù)庫(kù)的興起头镊,因其良好的可擴(kuò)展性蚣驼,弱化數(shù)據(jù)庫(kù)的設(shè)計(jì)范式,弱化一致性要求相艇,在解決海量數(shù)據(jù)和高并發(fā)的問題上明顯優(yōu)于關(guān)系型數(shù)據(jù)庫(kù)颖杏。因而很快廣泛應(yīng)用于互聯(lián)網(wǎng)業(yè)務(wù)中。

Redis作為基于K-V的NoSQL數(shù)據(jù)庫(kù)坛芽,具有高性能留储、豐富的數(shù)據(jù)結(jié)構(gòu)、持久化咙轩、高可用获讳、分布式、支持復(fù)制等特性活喊。從09年至今丐膝,經(jīng)歷8年多的錘煉,已經(jīng)非常穩(wěn)定钾菊,并且得到業(yè)界的廣泛認(rèn)可和使用帅矗,同時(shí)社區(qū)非常活躍煞烫。

團(tuán)隊(duì)工作重心

微博研發(fā)中心數(shù)據(jù)庫(kù)部門主要負(fù)責(zé)全微博平臺(tái)的后端資源的托管和運(yùn)維浑此,涉及的資源種類比較多,數(shù)據(jù)量比較大滞详,業(yè)務(wù)線和資源實(shí)例數(shù)目也是非常之多凛俱,并發(fā)量巨大。而這些正是微博這種體量的公司應(yīng)該具有的茵宪,微博作為當(dāng)今中文社交媒體的第一品牌最冰,擁有超過(guò)3.76億的月活用戶,也是當(dāng)前社會(huì)熱點(diǎn)事件傳播的最主要平臺(tái)稀火,其中包括但不限制于大型活動(dòng)(如:里約奧運(yùn)會(huì)暖哨、朱日和沙場(chǎng)大點(diǎn)兵等),春晚,明星動(dòng)態(tài)(如:王寶強(qiáng)離婚事件篇裁、女排奪冠沛慢、喬任梁去世、白百合出軌达布、TFBOYS生日团甲、鹿晗關(guān)曉彤CP等)。

而熱點(diǎn)事件往往具有不可預(yù)見性和突發(fā)性黍聂,并且伴隨著極短時(shí)間內(nèi)流量的數(shù)倍增長(zhǎng)躺苦,甚至更多,有時(shí)持續(xù)時(shí)間較長(zhǎng)产还。如何快速應(yīng)對(duì)突發(fā)流量的沖擊匹厘,確保線上服務(wù)的穩(wěn)定性,是一個(gè)非常巨大的挑戰(zhàn)和有意義的事情脐区。為了達(dá)到這一目標(biāo)愈诚,需要有一個(gè)完善的,穩(wěn)定可靠的牛隅,健壯的數(shù)據(jù)庫(kù)運(yùn)維體系來(lái)提供支撐和管理炕柔,所以我們團(tuán)隊(duì)也是在領(lǐng)導(dǎo)的指導(dǎo)下,有目標(biāo)媒佣、有計(jì)劃的開展一些數(shù)據(jù)庫(kù)自動(dòng)化運(yùn)維平臺(tái)的建設(shè)工作匕累。


重大的變化與核心變化

Redis的版本號(hào)命名規(guī)則借鑒了Linux的方式,版本號(hào)第二位如果是奇數(shù)丈攒,則為非穩(wěn)定版本哩罪,如果為偶數(shù),則為穩(wěn)定版本巡验。
穩(wěn)定版本的一些主要改進(jìn)吧:

  • Redis2.6
    1)鍵的過(guò)期時(shí)間支持毫秒
    2)從節(jié)點(diǎn)提供只讀功能
    3)服務(wù)端支持Lua腳本
    4)放開客戶端連接數(shù)的硬編碼限制
    5)去掉虛擬內(nèi)存相關(guān)功能等

  • Redis2.8
    1)完善主從復(fù)制功能际插,實(shí)現(xiàn)增量復(fù)制
    2)Redis設(shè)置明顯的進(jìn)程名,在系統(tǒng)中ps命令即可查看
    3)發(fā)布/訂閱添加pub/sub命令
    4)Redis Sentinel第二版發(fā)布显设,較Redis 2.6更加完善框弛,可以線上使用
    5)可以通過(guò)config set命令設(shè)置maxclients等

  • Redis3.0
    1)推出Redis的分布式集群 Redis Cluster
    2)全新的embedded string對(duì)象編碼結(jié)果,優(yōu)化小對(duì)象的內(nèi)存訪問捕捂,在特定的工作負(fù)載下能大幅度提升性能
    3)LRU算法提升
    4)config set 設(shè)置maxmemory的時(shí)候可以設(shè)置不用的單位
    5)新的Client pause命令瑟枫,在指定時(shí)間內(nèi)停止處理客戶端請(qǐng)求等

  • Redis3.2
    1)添加GEO功能
    2)新的List編碼類型quicklist
    3)SDS在速度和節(jié)省空間上都做了優(yōu)化
    4)Lua腳本功能增強(qiáng)
    5)新的RDB格式,仍兼容舊版RDB指攒,同時(shí)加載速度上也有提升
    6)Cluster nodes命令加速等

  • 在Redis4.0版本上慷妙,我認(rèn)為最核心的功能應(yīng)該是支持了module,這極大的豐富的Redis的功能允悦,使得許多Redis本身不具有的膝擂,第三方開發(fā)者拓展的功能也能加載到Redis中當(dāng)一個(gè)功能進(jìn)行使用,比如RediSearch、ReJSON架馋、Redis-ML等狞山。除此之外,還看到有很多新特性:
    1)psync2.0叉寂,優(yōu)化了之前版本主從節(jié)點(diǎn)切換必然引起全量復(fù)制的問題
    2)提供全新的緩存剔除算法LFU萍启,并對(duì)已有算法進(jìn)行了優(yōu)化
    3)提供了非阻塞del和flushall和flushdb功能,有效解決了刪除bigkey可能造成的Redis阻塞
    4)提供了RDB-AOF混合持久化格式
    5)提供memory命令屏鳍,實(shí)現(xiàn)對(duì)內(nèi)存的更為全面的監(jiān)控統(tǒng)計(jì)
    6)Redis Cluster 兼容NAT和Docker
    7)引入Jemalloc庫(kù)勘纯,優(yōu)化內(nèi)存訪問等等

Redis中的數(shù)據(jù)類型和它們的使用場(chǎng)景

Redis之所以能夠被廣泛的應(yīng)用于企業(yè)的架構(gòu)中,而且是不可或缺的重要組成部分孕蝉,也可以說(shuō)是標(biāo)配吧屡律,其中很重要的一點(diǎn)就是得益于它具有豐富的數(shù)據(jù)結(jié)構(gòu)腌逢,這也是它逐漸替代Memcached降淮,備受青睞的重要原因。那么Redis都提供哪些數(shù)據(jù)類型呢搏讶?
相信對(duì)Redis有了解過(guò)的同學(xué)都知道佳鳖,它的數(shù)據(jù)類型有:String、Hash媒惕、List系吩、Set、Zset妒蔚、Bitmaps穿挨、HyperLogLog、GEO等肴盏。


隨著互聯(lián)網(wǎng)的興起和Redis技術(shù)的不斷完善和發(fā)展科盛,它已經(jīng)被廣泛應(yīng)用于各行各業(yè)中,應(yīng)用場(chǎng)景也是百花齊放菜皂。比如:會(huì)話緩存(Session cache)贞绵、全頁(yè)緩存(FPC)、手機(jī)驗(yàn)證碼恍飘、訪問頻率限制/黑白名單榨崩、消息隊(duì)列、發(fā)布與訂閱章母、消息通知母蛛、排名/排行榜/最新列表、計(jì)數(shù)器(比如微博的轉(zhuǎn)評(píng)贊計(jì)數(shù)乳怎、閱讀數(shù)(瀏覽數(shù)彩郊,視頻播放計(jì)數(shù))、博文數(shù)(發(fā)帖數(shù))、粉絲數(shù)焦辅、關(guān)注數(shù)(喜歡商品數(shù))博杖、未讀數(shù)(動(dòng)態(tài)數(shù)))、共同好友/喜好/標(biāo)簽筷登、推送剃根、下拉刷新、私信前方、商品庫(kù)存管理(限時(shí)的優(yōu)惠活動(dòng)信息)狈醉、證券指標(biāo)實(shí)時(shí)計(jì)算,發(fā)號(hào)器/UUID惠险、以及隨著LBS(基于位置服務(wù))的發(fā)展苗傅,加入的GEO(地理信息定位)的功能和基于Lua自定義命令或功能等等。大家在使用過(guò)程中班巩,需要結(jié)合自己的業(yè)務(wù)場(chǎng)景渣慕,選擇正確的數(shù)據(jù)類型。

Redis數(shù)據(jù)庫(kù)主要的特點(diǎn)和優(yōu)勢(shì)

Redis作為基于K-V的NoSQL數(shù)據(jù)庫(kù)抱慌,具有高性能逊桦、豐富的數(shù)據(jù)結(jié)構(gòu)、持久化抑进、高可用强经、分布式、支持復(fù)制等特性寺渗。從09年至今匿情,經(jīng)歷8年多的錘煉,已經(jīng)非常穩(wěn)定信殊,并且得到業(yè)界的廣泛認(rèn)可和使用炬称,同時(shí)社區(qū)非常活躍鸡号,開發(fā)者又很嚴(yán)謹(jǐn)转砖,這使得Redis版本非常精簡(jiǎn),bug fix非常高效鲸伴。根據(jù)similarweb.com的統(tǒng)計(jì)府蔗,中國(guó)Redis用戶占全球Redis用戶的40.96%,所以我們?cè)谑褂玫倪^(guò)程中遇到的問題汞窗,大部分可能都有解決方案姓赤。

  • 需要關(guān)注的點(diǎn)比較多:
    1)安全問題:Redis用非root用戶啟動(dòng),并且運(yùn)行在內(nèi)網(wǎng)仲吏,盡可能不要暴露在外網(wǎng)不铆,配置認(rèn)證requirepass xxx蝌焚,減少被攻擊的風(fēng)險(xiǎn);開啟危險(xiǎn)命令認(rèn)證(keys-need-auth yes rename-command KEYS MY_KEYS)

    2)容量問題:合理評(píng)估誓斥;合理使用內(nèi)存分配策略(no-enviction只洒、allkeys-random、allkeys-lru劳坑、volatile-random毕谴、volatile-ttl、volatile-lru)距芬;檢查是否有內(nèi)存碎片涝开;選擇合適的服務(wù)類型(Redis cluster或者pika);水平拆分框仔;性能滿足的條件下選擇諸如ziplist類的內(nèi)部編碼

    3)big-key問題:可能會(huì)引起慢查或者帶寬瓶頸舀武,按照業(yè)務(wù)邏輯拆成小key或者業(yè)務(wù)解耦剝離big-key或直接改用其他存儲(chǔ)方式

    4)hot-key問題:Redis是單進(jìn)程,節(jié)點(diǎn)實(shí)例很容易成為系統(tǒng)的短板离斩,垂直擴(kuò)容银舱;增加local cache;如果只是簡(jiǎn)單的k-v結(jié)構(gòu)捐腿,可以考慮使用Memcached

    5)使用姿勢(shì)問題:避免使用阻塞操作(如:flushall纵朋、flushdb、keys *等)茄袖;盡量使用Pipeline,減少syscall帶來(lái)的網(wǎng)絡(luò)IO嘁锯,但要注意限制數(shù)據(jù)量大邢芟椤;對(duì)多個(gè)元素操作時(shí)家乘,像使用SORT蝗羊、LREM、SUNION仁锯,計(jì)算復(fù)雜度為O(N), 避免線上亂用耀找;盡可能使用最新的版本

    6)Key過(guò)期問題:合理設(shè)置過(guò)期時(shí)間;如果存在許多該過(guò)期的key而沒被及時(shí)刪除业崖,可以通過(guò)命令scan野芒、hscan、sscan双炕、zscan狞悲、keys *遍歷一遍key的方式實(shí)現(xiàn)

    7)配置上:建議開啟tcp-keepalive,tcp-backlog妇斤,從庫(kù)設(shè)置readonly yes

    8)系統(tǒng)設(shè)置:關(guān)閉NUMA摇锋;關(guān)閉transparent _hugepage; 關(guān)閉swap

Redis如何做消息隊(duì)列

Redis做消息隊(duì)列丹拯,有兩種實(shí)現(xiàn)方式:
第一種:通過(guò)數(shù)據(jù)結(jié)構(gòu)List來(lái)實(shí)現(xiàn)


優(yōu)點(diǎn):

  • 能夠?qū)崿F(xiàn)持久化;支持集群荸恕;接口使用簡(jiǎn)單

缺點(diǎn):

  • 如上圖所示乖酬,一條消息只會(huì)被一個(gè)消費(fèi)者消費(fèi),所以不存在有多個(gè)消費(fèi)者消費(fèi)一條消息
  • 生產(chǎn)者和消費(fèi)者的高可用或崩潰后的處理機(jī)制需要自己實(shí)現(xiàn)
  • 當(dāng)生產(chǎn)者消息寫入太快融求,消費(fèi)者消費(fèi)太慢剑刑,則有可能會(huì)導(dǎo)致內(nèi)存溢出問題,導(dǎo)致進(jìn)程crash

第二種:通過(guò)pub/sub來(lái)實(shí)現(xiàn)


優(yōu)點(diǎn):
一個(gè)生產(chǎn)者可以對(duì)應(yīng)多個(gè)消費(fèi)者双肤,但是必須保證消息發(fā)布者和消息的訂閱者同時(shí)在線施掏,否則,否則一旦消息訂閱者由于各種異常情況而被迫斷開連接茅糜,在其重新連接后七芭,其離線期間的消息是無(wú)法被重新通知的(即發(fā)即棄)。當(dāng)然蔑赘,生產(chǎn)者不需要關(guān)心有多少的訂閱者狸驳,也不用關(guān)心訂閱者的具體信息本讥,而訂閱者可以根據(jù)需要自由選擇訂閱哪些頻道:支持集群笋熬;接口使用簡(jiǎn)單等鳄梅。

缺點(diǎn):

  • 沒有持久化機(jī)制鳄炉,屬于即發(fā)即棄模式肛根,因此也不需要制定消息的備份和恢復(fù)機(jī)制
  • Redis沒有提供保證pub/sub消息性能的方案
  • 當(dāng)大量的消息到達(dá)Redis服務(wù)時(shí)逗鸣,如果訂閱者不能及時(shí)完成消費(fèi)盲再,則就會(huì)導(dǎo)致消息堆積框全,引發(fā)上面一樣的內(nèi)存問題

當(dāng)前Redis的集群功能和實(shí)現(xiàn)

要了解Redis的集群功能旨袒,可以從數(shù)據(jù)分片汁针、數(shù)據(jù)遷移、集群通訊砚尽、故障檢測(cè)以及故障轉(zhuǎn)移等方面進(jìn)行了解施无,Cluster相關(guān)的代碼也不是很多,注釋也很詳細(xì)必孤,可自行查看猾骡,地址是:https://github.com/antirez/redis/blob/unstable/src/cluster.c
這里由于篇幅的原因,主要從數(shù)據(jù)分片和數(shù)據(jù)遷移兩方面進(jìn)行詳細(xì)介紹:

  • 數(shù)據(jù)分片
    Redis cluster在設(shè)計(jì)中沒有使用一致性哈希(consistency hashing)敷搪,而是使用數(shù)據(jù)分片(sharding)兴想,引入哈希槽(hash slot)來(lái)實(shí)現(xiàn);一個(gè) redis cluster包含16384(0~16383)個(gè)哈希槽购啄,存儲(chǔ)在redis cluster中的所有的鍵都會(huì)被映射到這些slot中襟企,集群中的每個(gè)鍵都屬于這16384個(gè)哈希槽的其中一個(gè),集群使用公式slot=CRC16(key)/16384來(lái)計(jì)算key屬于哪個(gè)槽狮含,其中CRC16(key)語(yǔ)句用于計(jì)算key的CRC16 校驗(yàn)和顽悼。
    集群中的每個(gè)主節(jié)點(diǎn)(Master)都負(fù)責(zé)處理16384個(gè)哈希槽中的一部分曼振,當(dāng)集群處于穩(wěn)定狀態(tài)時(shí),每個(gè)哈希槽都只由一個(gè)主節(jié)點(diǎn)進(jìn)行處理蔚龙,每個(gè)主節(jié)點(diǎn)可以有一個(gè)到N個(gè)從節(jié)點(diǎn)(Slave)冰评,當(dāng)主節(jié)點(diǎn)出現(xiàn)宕機(jī)或網(wǎng)絡(luò)斷線等不可用時(shí),從節(jié)點(diǎn)能自動(dòng)提升為主節(jié)點(diǎn)進(jìn)行處理木羹。


如上甲雅,clusterNode數(shù)據(jù)結(jié)構(gòu)中的slots和numslots屬性記錄了節(jié)點(diǎn)負(fù)責(zé)處理哪些槽。其中坑填,slot屬性是一個(gè)二進(jìn)制位數(shù)組(bitarray),其長(zhǎng)度為16384/8=2048 Byte抛人,共包含16384個(gè)二進(jìn)制位。集群中的master節(jié)點(diǎn)用bit(0和1)來(lái)標(biāo)識(shí)對(duì)于某個(gè)槽是否擁有脐瑰。比如妖枚,對(duì)于編號(hào)為1的槽,master只要判斷序列的第二位(索引從0開始)的值是不是1即可苍在,時(shí)間復(fù)雜度為O(1)绝页。


集群中所有槽的分配信息都保存在clusterState數(shù)據(jù)結(jié)構(gòu)的slots數(shù)組中,程序要檢查槽i是否已經(jīng)被分配或者找出處理槽i的節(jié)點(diǎn)寂恬,只需要訪問clusterState.slots[i]的值即可续誉,復(fù)雜度也為O(1)。clusterState數(shù)據(jù)結(jié)構(gòu)如下所示:



查找關(guān)系如下圖:


  • 數(shù)據(jù)遷移
    數(shù)據(jù)遷移可以理解為slot和key的遷移初肉,這個(gè)功能很重要酷鸦,極大的方便了集群做線性擴(kuò)展,實(shí)現(xiàn)平滑的擴(kuò)容或縮容朴译。
    那么它是一個(gè)怎樣的實(shí)現(xiàn)過(guò)程呢井佑?
    下面舉個(gè)例子:現(xiàn)在要將Master A節(jié)點(diǎn)中的編號(hào)為1、2眠寿、3的slot遷移到Master B節(jié)點(diǎn)中,在slot遷移的中間狀態(tài)下焦蘑,slot 1盯拱、2、3在Master A節(jié)點(diǎn)的狀態(tài)表現(xiàn)為MIGRATING,在Master B節(jié)點(diǎn)的狀態(tài)表現(xiàn)為IMPORTING例嘱。

MIGRATING狀態(tài)
這個(gè)狀態(tài)如上圖所示是被遷移slot在當(dāng)前所在Master A節(jié)點(diǎn)中出現(xiàn)的一種狀態(tài)狡逢,預(yù)備遷移slot從Mater A到Master B的時(shí)候,被遷移slot的狀態(tài)首先變?yōu)镸IGRATING狀態(tài)拼卵,當(dāng)客戶端請(qǐng)求的某個(gè)key所屬的slot的狀態(tài)處于MIGRATING狀態(tài)的時(shí)候奢浑,可能會(huì)出現(xiàn)以下幾種情況:
1)如果key存在則成功處理
2)如果key不存在,則返回客戶端ASK腋腮,客戶端根據(jù)ASK首先發(fā)送ASKING命令到目標(biāo)節(jié)點(diǎn)雀彼,然后發(fā)送請(qǐng)求的命令到目標(biāo)節(jié)點(diǎn)
3)當(dāng)key包含多個(gè)命令時(shí):

  • 如果都存在則成功處理
  • 如果都不存在壤蚜,則返回客戶端ASK
  • 如果一部分存在,則返回客戶端TRYAGAIN徊哑,通知客戶端稍后重試袜刷,這樣當(dāng)所有的key都 遷移完畢的時(shí)候客戶端重試請(qǐng)求的時(shí)候回得到ASK,然后經(jīng)過(guò)一次重定向就可以獲取這批鍵

此時(shí)并不刷新客戶端中node的映射關(guān)系

IMPORTING狀態(tài)
這個(gè)狀態(tài)如上圖所示是被遷移slot在目標(biāo)Master B節(jié)點(diǎn)中出現(xiàn)的一種狀態(tài)莺丑,預(yù)備遷移slot從Mater A到Master B的時(shí)候著蟹,被遷移slot的狀態(tài)首先變?yōu)镮MPORTING狀態(tài)。在這種狀態(tài)下的slot對(duì)客戶端的請(qǐng)求可能會(huì)有下面幾種影響:

1)如果key不存在則新建
2)如果key不在該節(jié)點(diǎn)上梢莽,命令會(huì)被MOVED重定向萧豆,刷新客戶端中node的映射關(guān)系

如果是ASKING命令則命令會(huì)被執(zhí)行,從而key沒在被遷移的節(jié)點(diǎn)昏名,已經(jīng)被遷移到目標(biāo)節(jié)點(diǎn)的情況命令可以被順利執(zhí)行涮雷。

鍵空間遷移
這是完成數(shù)據(jù)遷移重要的一步,鍵空間遷移是指當(dāng)滿足了slot遷移前提的情況下葡粒,通過(guò)相關(guān)命令將slot 1份殿、2、3中的鍵空間從Master A節(jié)點(diǎn)轉(zhuǎn)移到Master B節(jié)點(diǎn)嗽交,這個(gè)過(guò)程由MIGRATE命令經(jīng)過(guò)3步真正完成數(shù)據(jù)轉(zhuǎn)移卿嘲。步驟示意如下:

經(jīng)過(guò)上面三步可以完成鍵空間數(shù)據(jù)遷移,然后再將處于MIGRATING和IMPORTING狀態(tài)的槽變?yōu)槌B(tài)即可夫壁,從而完成整個(gè)重新分片的過(guò)程拾枣。

Redis的高可用方案

根據(jù)業(yè)務(wù)的規(guī)模以及Redis使用環(huán)境的不同,Redis的高可用方案也比較多盒让。這里舉一些例子說(shuō)明一下業(yè)界比較常用的一些方案吧梅肤。需要說(shuō)明一下的是下面的這些方案不涉及到同城多活或異地多活的場(chǎng)景,但是部分方案能夠做到跨數(shù)據(jù)中心的災(zāi)備邑茄。

  • Keepalive + Redis


  • Redis Sentinel
  • Twemproxy + Redis Sentinel + Redis
  • Redis Cluster
  • Redis Sentinel + Proxy + Zookeeper + Redis
  • Zookeeper + MySQL + Redis + DNS

Redis數(shù)據(jù)庫(kù)在向著自動(dòng)化運(yùn)維的方向發(fā)展的過(guò)程中姨蝴,面臨的最大的挑戰(zhàn)是什么?

我想最大的挑戰(zhàn)應(yīng)該是“智能化”吧肺缕。現(xiàn)在業(yè)界都在追捧DevOps左医、AIOps,那么在Redis的自動(dòng)化運(yùn)維過(guò)程中同木,也需要學(xué)習(xí)行業(yè)的先進(jìn)思想浮梢,結(jié)合部門自身的實(shí)際穩(wěn)扎穩(wěn)打,逐一突破彤路。

首先在智能化實(shí)現(xiàn)之前秕硝,我們要盡力實(shí)現(xiàn)下面的一些需求:

1)數(shù)據(jù)庫(kù)運(yùn)維自動(dòng)化平臺(tái)的建設(shè),為RD和DBA提供較全面的自助服務(wù)和數(shù)據(jù)庫(kù)管理功能

2)工單事件關(guān)聯(lián)任務(wù)系統(tǒng)洲尊,一鍵完成自動(dòng)安裝部署远豺,添加產(chǎn)品線和報(bào)警

3)海量報(bào)警智能分類(比如按產(chǎn)品線或按DBA分類)奈偏,實(shí)現(xiàn)部分報(bào)警故障自愈 (比如:從庫(kù)readonly設(shè)置、內(nèi)存使用率超過(guò)95%自動(dòng)擴(kuò)容)

4)基于隊(duì)列分布式批量部署憋飞,可橫向擴(kuò)展霎苗,任務(wù)異步調(diào)度,滿足大規(guī)模部署榛做、擴(kuò)容的需求

5)日志實(shí)時(shí)展示唁盏,監(jiān)控?cái)?shù)據(jù)實(shí)時(shí)采集,圖形化多維度展示检眯,滿足可視化的需求

6)RedisHA支持秒級(jí)響應(yīng)厘擂,實(shí)現(xiàn)故障無(wú)縫切換,滿足高可用的需求

7)緩存彈性擴(kuò)縮容(利用私有云和公有云锰瘸,結(jié)合Docker容器化技術(shù)實(shí)現(xiàn))刽严,滿足對(duì)熱點(diǎn)的快速應(yīng)對(duì)

8)內(nèi)部開發(fā)了各種通用的管理和運(yùn)維腳本,化繁為簡(jiǎn)避凝,提高工作效率

9)根據(jù)歷史/晚高峰資源的性能指標(biāo)設(shè)置水位線舞萄,和報(bào)警閾值,提供決策支持

10)在Redis集群管削、容災(zāi)倒脓、異地多活(跨數(shù)據(jù)中心數(shù)據(jù)同步)、微服務(wù)等等方面還需要花很大的力氣去建設(shè)含思,目前依舊比較欠缺

智能化的實(shí)現(xiàn)還需要持續(xù)的投入和迭代崎弃。

數(shù)據(jù)庫(kù)的未來(lái),會(huì)朝著什么樣的方向發(fā)展含潘?

是的饲做,這幾年從運(yùn)維的角度看,明顯能感覺到數(shù)據(jù)體量上的膨脹遏弱,一個(gè)實(shí)例動(dòng)不動(dòng)就幾十G盆均,一個(gè)集群動(dòng)不動(dòng)幾百G、幾T漱逸,甚至更多缀踪。以Redis為代表的NoSQL數(shù)據(jù)庫(kù)在處理這方面的表現(xiàn)還是令人非常滿意的。它的高性能表現(xiàn)得淋漓盡致虹脯,從微博的業(yè)務(wù)來(lái)看,Redis實(shí)例每天承載著千億級(jí)的寫QPS奏候、萬(wàn)億級(jí)的讀QPS循集,數(shù)據(jù)量TB級(jí),確實(shí)沒有Redis蔗草,且不說(shuō)能不能用關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)咒彤,單是硬件成本就幾何倍增長(zhǎng)了吧疆柔。

未來(lái),隨著硬件成本的降低镶柱,硬件性能優(yōu)化的極致旷档,比如PCIE、25GE網(wǎng)絡(luò)的升級(jí)歇拆,一定是軟硬結(jié)合鞋屈,會(huì)出現(xiàn)更多的Redis的相關(guān)產(chǎn)品和服務(wù)。包括收費(fèi)的Redis Enterprise故觅,Cloud Redis等厂庇,也包括開源的Pika、TiDB等NewSQL输吏。正如阿里云的同學(xué)所說(shuō)权旷,“數(shù)據(jù)庫(kù)終極是九九歸一 -- 量子數(shù)據(jù)庫(kù)”,一起期待吧贯溅。

對(duì)于初學(xué)Redis的同學(xué)拄氯,您有什么好的學(xué)習(xí)方法和技巧給他們嗎?

首先當(dāng)然還是需要多看官方文檔它浅,多看看業(yè)界大牛的技術(shù)博客译柏。其次可以買幾本書對(duì)比著學(xué)習(xí)下,目前市面上的相關(guān)書籍也就4罚缕,5本的樣子艇纺。然后主要的還是要多動(dòng)手,實(shí)踐出真知邮弹,在使用的過(guò)程中黔衡,還是要結(jié)合具體的業(yè)務(wù)場(chǎng)景,靈活使用腌乡。有能力的時(shí)候盟劫,看看源碼,了解底層的實(shí)現(xiàn)原理与纽。最后侣签,多思考多總結(jié),好記性不如爛筆頭急迂,每一次踩坑都是一次成長(zhǎng)影所,遇到解決不了的問題的時(shí)候多向業(yè)界大牛們請(qǐng)教學(xué)習(xí),平時(shí)多關(guān)注一些業(yè)界相關(guān)技術(shù)的最新動(dòng)態(tài)僚碎。

如何看待Redis的未來(lái)猴娩?從技術(shù)和非技術(shù)的多個(gè)維度,如何看待Redis的發(fā)展方向?

縱觀Redis的發(fā)展,無(wú)獨(dú)有偶的與互聯(lián)網(wǎng)的發(fā)展浪潮緊緊相隨卷中,從web1.0到web2.0的轉(zhuǎn)變矛双,從博客、貼吧蟆豫、論壇到社交媒體议忽,從文本到圖文再到短視頻的興起,從互聯(lián)網(wǎng)到移動(dòng)互聯(lián)網(wǎng)十减,從3G到4G到即將普及的5G栈幸,從異軍突起的新興產(chǎn)業(yè),如:團(tuán)購(gòu)嫉称、電商侦镇、外賣、旅游织阅、游戲壳繁、互聯(lián)網(wǎng)金融和證券、出行和直播等等荔棉,商業(yè)模式在不斷的改變闹炉,不斷的在刷新人們的生活方式。

但是在這些變化的背后润樱,不變的是Redis作為基礎(chǔ)服務(wù)為企業(yè)的高可用架構(gòu)保駕護(hù)航渣触,變化的是Redis的使用案例越來(lái)越豐富、服務(wù)體驗(yàn)越來(lái)越好壹若。在Redis的發(fā)展過(guò)程中嗅钻,由于企業(yè)需求的多樣化,對(duì)Redis的要求越來(lái)越高店展,許多場(chǎng)景Redis的功能顯得相形見絀养篓,因此出現(xiàn)了諸如Codis、Pika赂蕴、CounterService柳弄、ApsaraCache、CacheCloud概说、smartClient(Redisson)等產(chǎn)品碧注,它們是對(duì)Redis的有益補(bǔ)充。

隨著4.0版本module功能的推出糖赔,使得Redis擁有更多的想象和發(fā)展空間萍丐,在全文索引(RediSearch),AI(Redis-ML)放典、云計(jì)算碉纺、大數(shù)據(jù)船万、物聯(lián)網(wǎng)、人工智能骨田、BlockChain等領(lǐng)域,模塊化的融合能力將極大的豐富Redis的功能声怔,從而為企業(yè)構(gòu)建更為多元化态贤、立體化的數(shù)據(jù)庫(kù)使用方式。

其它分享

在使用Redis的過(guò)程中醋火,還需要保持關(guān)注官方的動(dòng)態(tài)悠汽,多看看github上的changelog和issue,因?yàn)殡S著Redis的用戶群體的增多芥驳,使用場(chǎng)景的復(fù)雜化柿冲,Redis自身隱藏的問題或瓶頸也會(huì)暴露出來(lái),這樣有助于我們避免踩一些不必要的坑兆旬,及早規(guī)避一些風(fēng)險(xiǎn)假抄。

不僅僅是Redis,學(xué)習(xí)其他的數(shù)據(jù)庫(kù)也是一樣的丽猬。另外宿饱,我們?cè)陉P(guān)注Redis本身以外,還需要關(guān)注一些其他的Redis的替代產(chǎn)品(比如:SSDB脚祟、Pika谬以、Codis、ApsaraCache由桌、TiDB等)为黎,Redis的周邊工具(如:redis-migrate-tool、redis-faina行您、redis-audit铭乾、redis-rdb-tools、RedisMyAdmin等)邑雅、中間件(如:twemproxy片橡、corvus、redis-cerberus)等淮野。如果你想要從事Redis的開發(fā)捧书,那么你可能需要關(guān)注的更多,比如各種鎖的實(shí)現(xiàn)骤星。
引用自:數(shù)據(jù)和云

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末经瓷,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子洞难,更是在濱河造成了極大的恐慌舆吮,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異色冀,居然都是意外死亡潭袱,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門锋恬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)屯换,“玉大人,你說(shuō)我怎么就攤上這事与学⊥冢” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵索守,是天一觀的道長(zhǎng)晕窑。 經(jīng)常有香客問我,道長(zhǎng)卵佛,這世上最難降的妖魔是什么杨赤? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮级遭,結(jié)果婚禮上望拖,老公的妹妹穿的比我還像新娘。我一直安慰自己挫鸽,他們只是感情好说敏,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著丢郊,像睡著了一般盔沫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上枫匾,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天架诞,我揣著相機(jī)與錄音,去河邊找鬼干茉。 笑死谴忧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的角虫。 我是一名探鬼主播沾谓,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼戳鹅!你這毒婦竟也來(lái)了均驶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤枫虏,失蹤者是張志新(化名)和其女友劉穎妇穴,沒想到半個(gè)月后爬虱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腾它,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年跑筝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片携狭。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡继蜡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出逛腿,到底是詐尸還是另有隱情,我是刑警寧澤仅颇,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布单默,位于F島的核電站,受9級(jí)特大地震影響忘瓦,放射性物質(zhì)發(fā)生泄漏搁廓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一耕皮、第九天 我趴在偏房一處隱蔽的房頂上張望境蜕。 院中可真熱鬧,春花似錦凌停、人聲如沸粱年。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)台诗。三九已至,卻和暖如春赐俗,著一層夾襖步出監(jiān)牢的瞬間拉队,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工阻逮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留粱快,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓叔扼,卻偏偏與公主長(zhǎng)得像事哭,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子币励,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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