這是第一篇Redis的分享,開頭主要就是對Redis的整體涉及的模塊以及一些應(yīng)用場景包括運維等會做一些粗劣的說明。
初識Redis
- 1Redis簡介廊驼。
官方翻譯
Redis是一個開源(BSD許可)犹芹,內(nèi)存存儲的數(shù)據(jù)結(jié)構(gòu)服務(wù)器,可用作數(shù)據(jù)庫阁苞,
高速緩存和消息隊列代理困檩。它支持字符串、哈希表那槽、列表悼沿、集合、有序集合骚灸,位圖糟趾,
hyperloglogs等數(shù)據(jù)類型。內(nèi)置復(fù)制甚牲、Lua腳本义郑、LRU收回、事務(wù)以及不同級別磁盤持久化功能丈钙,
同時通過Redis Sentinel提供高可用非驮,通過Redis Cluster提供自動分區(qū)。
Redis[1]是一種基于鍵值對(key-value)的NoSQL數(shù)據(jù)庫雏赦,與很多鍵值對
數(shù)據(jù)庫不同的是劫笙,Redis中的值可以是由string(字符串)芙扎、hash(哈希)、
list(列表)填大、set(集合)戒洼、zset(有序集合)、Bitmaps(位圖)允华、
HyperLogLog施逾、GEO(地理信息定位)等多種數(shù)據(jù)結(jié)構(gòu)和算法組成,因此
Redis可以滿足很多的應(yīng)用場景例获,而且因為Redis會將所有數(shù)據(jù)都存放在內(nèi)存中汉额,
所以它的讀寫性能非常驚人。不僅如此榨汤,Redis還可以將內(nèi)存的數(shù)據(jù)利用快照和日志的形式
保存到硬盤上蠕搜,這樣在發(fā)生類似斷電或者機器故障的時候复亏,內(nèi)存中的 數(shù)據(jù)不會“丟失”四濒。
除了上述功能以外,Redis還提供了鍵過期率触、發(fā)布訂閱蜜宪、事務(wù)虫埂、流水線、Lua腳本等附加功能圃验。
[1] http://redis.io
[2] http://antirez.com
[3] https://github.com/antirez/redisredis特性
redis特性
1.運行速度快
原因:
1.數(shù)據(jù)是存放在內(nèi)存的
2.使用單線程掉伏,預(yù)防了多線程可能產(chǎn)生的競爭問題
3.redis是使用c語言開發(fā)的,距離操作系統(tǒng)更近澳窑,執(zhí)行速度更快斧散。
4.Redis源代碼十分精簡。
- 基于鍵值對的數(shù)據(jù)結(jié)構(gòu)服務(wù)器摊聋。
了解
很多鍵值對數(shù)據(jù)庫不同的是鸡捐,Redis中的值不僅可以是字符串,而且還可以是具
體的數(shù)據(jù)結(jié)構(gòu)麻裁,這樣不僅能便于在許多應(yīng)用場景的開發(fā)箍镜,同時也能夠提高開發(fā)效率。
Redis的全稱是REmote Dictionary Server煎源,它主要提供了5種數(shù)據(jù)結(jié)
構(gòu):字符串色迂、哈希、列表薪夕、集合脚草、有序集合赫悄,同時在字符串的基礎(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)用。
-
功能豐富
- 提供鍵過期功能讲仰,實現(xiàn)緩存
- 提供了發(fā)布訂閱功能慕趴,實現(xiàn)消息系統(tǒng)
- 支持Lua腳本功能,可以利用它創(chuàng)造新的Redis命令
- 提供了簡單的事務(wù)功能
- 提供了流水線的功能鄙陡,能夠?qū)edis命令一次性傳到服務(wù)端冕房,減少網(wǎng)絡(luò)開銷
- 。趁矾。耙册。。毫捣。详拙。。
4.持久化
5.主從復(fù)制
8.高可用分布式
使用場景
- 緩存-----提供了過期時間設(shè)置蔓同,還有靈活控最大內(nèi)存和內(nèi)存溢出后淘汰策略
- 排行榜系統(tǒng)--根據(jù)按照熱度饶辙,按照發(fā)布時間等計算的排行榜,redis提供了列表和有序集合結(jié)構(gòu)斑粱,合理的使用可以方便的構(gòu)建很多系統(tǒng)弃揽。
- 計算器應(yīng)用------redis天然支持計算功能
- 社交網(wǎng)絡(luò)---點贊,粉絲则北,共同好友蹋宦,推送,下拉刷新等實現(xiàn)咒锻,訪問量很大冷冗,傳統(tǒng)的關(guān)系型不適合保存這些數(shù)據(jù)
- 消息隊列系統(tǒng)-----redis提供了發(fā)布訂閱和堵塞隊列功能,
- 等等
不可使用
可以站在數(shù)據(jù)規(guī)模和數(shù)據(jù)冷熱的角度來進行分析惑艇。
站在數(shù)據(jù)規(guī)模的角度看蒿辙,數(shù)據(jù)可以分為大規(guī)模數(shù)據(jù)和小規(guī)模數(shù)據(jù),我們知道Redis的數(shù)據(jù)是存放在內(nèi)存中的滨巴,雖然現(xiàn)在內(nèi)存已經(jīng)足夠便宜思灌,但是如果數(shù)據(jù)量非常大,例如每天有幾億的用戶行為數(shù)據(jù)恭取,
使用Redis來存儲的話泰偿,基本上是個無底洞,經(jīng)濟成本相當?shù)母摺?/p>
站在數(shù)據(jù)冷熱的角度看蜈垮,數(shù)據(jù)分為熱數(shù)據(jù)和冷數(shù)據(jù)耗跛,熱數(shù)據(jù)通常是指需要頻繁操作的數(shù)據(jù)裕照,反之為冷數(shù)據(jù),例如對于視頻網(wǎng)站來說调塌,視頻基本信息基本上在各個業(yè)務(wù)線都是經(jīng)常要操作的數(shù)據(jù)晋南,而用戶的觀看記錄不一定是經(jīng)常需要訪問的數(shù)據(jù),這里暫且不討論兩者數(shù)據(jù)規(guī)模的差異羔砾,單純站在數(shù)據(jù)冷熱的角度上看负间,視頻信息屬于熱數(shù)據(jù),用戶觀看記錄屬于冷數(shù)據(jù)姜凄。如果將這些冷數(shù)據(jù)放在Redis中政溃,基本上是對于內(nèi)存的一種浪費,但是對于一些熱數(shù)據(jù)可以放在Redis中加速讀寫态秧,也可以減輕后端存儲的負載玩祟,可以說是事半功倍。所以屿聋,Redis并不是萬金油空扎,相信隨著我們對Redis的逐步學(xué)習,能夠清楚Redis真正的使用場景润讥。
如何學(xué)好redis
- 切勿當作黑盒使用转锈,開發(fā)與運維同樣重要
2.閱讀源碼
? Redis是開源項目,由于作者對Redis代碼的極致追求楚殿,Redis的代碼量相對于許多NoSQL數(shù)據(jù)庫來說是非常小的撮慨,也就意味著作為普通的開發(fā)和運維人員也是可以“吃透”Redis的。通過閱讀優(yōu)秀的源碼脆粥,不僅能夠加深我們對于Redis的理解砌溺,而且還能提高自身的編碼水平,甚至可以對Redis做定制化变隔,也就是說可以修改Redis的源碼來滿足自身的需求规伐,例如新浪微博在Redis的早期版本上做了很多的定制化來滿足自身的需求,豌豆莢也開源基于Proxy的Redis分布式實現(xiàn)Codis.