redis介紹

redis介紹

redis 是開源的餐屎,基于內存的數據存儲系統(tǒng),可以用作數據庫队丝、緩存和消息中間件靡馁。
redis支持多種數據存儲結構,包括string, hashes, lists, sets, sorted sets机久。
通過復制臭墨、持久化和數據分片等特性,可以很方便地將redis擴展成一個能夠包好數百GB膘盖、每秒處理上百萬次請求的系統(tǒng)胧弛。

持久化

對于基于內存存儲的數據庫,一個很重要的問題是侠畔,服務器關閉時结缚,數據的安全性問題。redis有兩種持久化方案软棺,保證了數據的安全性红竭。

  1. RDB
    RDB是一種按照指定時間周期定期保存redis數據鏡像到一個單文件中的持久化方式。
    非常適用于用作容災備份喘落,因為RDB文件可以傳輸至不同地方備份茵宪,且服務器能夠很快地從RDB文件中恢復數據。
    但是RDB方式不適用于對數據丟失方案容忍度很低的場景瘦棋,因為按周期備份數據鏡像眉厨,盡管周期可以設置得很短,但是仍然有丟失數據的風險兽狭。

  2. AOF
    該方式能夠以AOF文件的方式憾股,保存每次對redis的數據修改。AOF文件是一個只允許追加的log文件箕慧,所以沒有查找?guī)淼男阅芟姆颉.斘募^大時,redis能夠自動重新AOF文件(合并部分同類操作INCR A 1, INCR A 1 --> INCR A 2).

redis的基本數據結構簡介

1. string

image

redis的string可以存儲以下三種類型的值:

  • 字節(jié)串(byte string)
  • 整數
  • 浮點數

當執(zhí)行set key value命令時颠焦,redis檢測到value值可以轉化為整數或者浮點數斩熊,會更改其數據類型,使其支持對整數和浮點數的特殊操作伐庭,如自增和自減INCR, INCRBY等操作粉渠,redis的強大之處還在于其支持對字符串的截取和二進制為操作。

命令 行為
GET 獲取存儲在給定間中的值
SET 設置存儲在給定鍵中的值
DEL 刪除
APPEND 在指定鍵末尾追加
INCR 增加1(對于int類型)

2. list

image

Redis的列表允許用戶從序列的==兩端==推入或者彈出元素圾另、獲取元素霸株,執(zhí)行各種常見的列表操作,如獲取子列表集乔。

3. set

image

集合以==無序==的方式來存儲多個各不相同的元素去件,用戶可以快速地對集合執(zhí)行添加元素、移除元素以及檢查一個元素是否存在于集合里的操作。
并且可以對多個set進行差集尤溜、交集倔叼、并集計算。

4. hash

image

散列可以讓用戶將多個鍵值對存儲到一個Redis鍵里面宫莱。從功能上來說丈攒,Redis為散列值提供了一些和字符串值相同的特性,使得散列非常適用于將一些相關的數據存儲在一起授霸。我們可以把這種數據聚集看作是關系==數據庫中的行==肥印,或者==文檔存儲中的文檔==。

5. sort set

image

有序集合存儲著==成員與分值之間的映射==绝葡,并且提供了分值處理命令,以及根據分值大小有序地獲雀桂摹(fetch)或掃描(scan)成員和分值的命令藏畅。

6. 發(fā)布&訂閱

訂閱者(listener)訂閱頻道(channel),發(fā)送者(sender)想頻道發(fā)送二進制字符串消息功咒。每當有消息發(fā)送至指定頻道時愉阎,頻道的所有訂閱者都會收到消息。

命令 行為
SUBSCRIBE SUBSCRIBE channel [channel ...] ——訂閱給定的一個或多個頻道
UNSUBSCRIBE UNSUBSCRIBE [channel [channel ...]]——退訂給定的一個或多個頻道力奋,如果未指定頻道榜旦,則退訂所以頻道
publis PUBLISH channel message ——向給定頻道發(fā)送消息
PSUBSCRIBE PSUBSCRIBE pattern [pattern ...] ——訂閱與給定模式想匹配的所有頻道
PUNSUBSCRIBE PUNSUBSCRIBE [pattern ...]——退訂給定模式

事務

MULTI, EXEC, DISCARD & WATCH作為redis事務的基本命令,允許原子性地執(zhí)行一組redis操作景殷。

  • 保證所有事務內的命令將會串行順序執(zhí)行溅呢,保證不會在事務的執(zhí)行過程中被其他客戶端打斷。不同于關系型數據庫的事務概念猿挚,redis保證會在執(zhí)行完畢上一個事務的所有命令后才會處理其他客戶端的命令咐旧。
  • 事務內的命令全部執(zhí)行或一個都不執(zhí)行。
> MULTI
OK
> INCR foo
QUEUED
> INCR bar
QUEUED
> EXEC
1) (integer) 1
2) (integer) 1
  • 事務運行中出錯
    • 在執(zhí)行EXEC調用前出錯绩蜻,如語法錯誤铣墨、out of memmeroy錯誤。如果命令入隊是返回QUEUED办绝,則入隊成功伊约;否則入隊失敗,客戶端會停止并取消該事務孕蝉。
    • 執(zhí)行EXEC調用后出錯屡律,如對string類型的鍵調用了list類型的操作。==對于此類錯誤降淮,redis并未進行特殊處理疹尾,即使事務中某些命令產生了此類錯誤,事務中的其他命令仍會繼續(xù)執(zhí)行下去。此特性有別于傳統(tǒng)關系型數據庫的事務概念纳本。== 簡而言之窍蓝,redis不支持事務回滾。
MULTI
+OK
SET a 3
abc
+QUEUED
LPOP a
+QUEUED
INCR a
EXEC
*3
+OK
-ERR Operation against a key holding the wrong kind of value
(integer) 4

為什么redis不支持事務回滾

redis命令只會因為語法錯誤而失敗繁成,在事務命令入隊時就能檢查到該錯誤吓笙;或者錯誤運用了鍵的命令。這就是說巾腕,失敗的命令是有編程錯誤造成的面睛,這些錯誤應該在開發(fā)過程中被發(fā)現(xiàn),不應該出現(xiàn)在生產環(huán)境中尊搬。
因此不需要支持回滾叁鉴,是redis內部保持了簡單和快速高效。

PS: 使用事務主要是為了:移除競爭條件佛寿。從事務的特性我們知道幌墓,redis的事務能夠保證事務內的所有命令在不被其他客戶端打斷的情況下順序執(zhí)行。

redis沒有實現(xiàn)傳統(tǒng)關系型數據庫的select ... for update的悲觀鎖

悲觀鎖加鎖會造成客戶端競爭條件的長時間等待冀泻,所以為了盡可能減少客戶端等待時間常侣,redis未實現(xiàn)for update的悲觀鎖機制。
而是通過watch命令弹渔,檢測某值是否被搶先修改胳施,并在發(fā)生時給客戶端返回錯誤。該機制類似于關系型數據庫中根據版本號實現(xiàn)的樂觀鎖機制肢专。

通過配置主從復制來提升redis的讀性能

redis復制

復制可以讓其他服務器擁有一個不斷更新的數據副本舞肆,擴展系統(tǒng)的讀請求處理能力。
從服務器連接住服務器時的步驟

步驟序列 主服務器操作 從服務器操作
1 等待命令進入 連接主服務器博杖,發(fā)送SYNC同步命令
2 開始I執(zhí)行BGSAVE胆绊,備份數據副本,在此期間使用緩沖區(qū)記錄BGSAVE之后執(zhí)行的所以命令 根據配置選項決定是繼續(xù)使用現(xiàn)有數據(if has)來處理客戶端的命令請求欧募,還是想發(fā)送請求的客戶端返回錯誤
3 BGSAVE執(zhí)行完畢压状,想從服務器發(fā)送快照文件,并在發(fā)送期間繼續(xù)使用緩沖區(qū)記錄被執(zhí)行的命令 丟棄所有舊數據(if has)跟继,開始載入主服務器發(fā)來的快照
4 快照文件發(fā)送完畢种冬,開始想從服務器發(fā)送存儲在緩沖區(qū)里面的寫命令 完成對快照文件的解釋,開始正常接受命令請求
5 緩沖區(qū)存儲的寫命令發(fā)送完畢舔糖,此后每執(zhí)行一個寫命令娱两,就行從服務器發(fā)送相同的寫命令 執(zhí)行主服務器發(fā)來的所有存儲在緩沖區(qū)的寫命令;此后金吗,接收并執(zhí)行主服務器傳來的每個寫命令

從服務器在進行同步是十兢,會清空自身原本數據趣竣。

redis不支持主主復制

當多個從服務器嘗試鏈接同一個主服務器的時候:

  1. 當上表步驟3尚未執(zhí)行時,所有服務器都會接受到相同的快照文件和相同的緩沖區(qū)寫命令
  2. 當步驟3正在執(zhí)行或者已經執(zhí)行完畢旱物,新連接的從服務器會重新執(zhí)行一遍步驟1-5

主從鏈

redis可以組成如下圖所示的主從鏈遥缕。
因為redis的復制會占用主服務器的網絡和其他開銷,如果一個主服務器需要同步太多的從服務器時宵呛,可能會造成主服務器不可用单匣,所以可以組成如下所示的主從鏈樹狀結構,用以在提升整體讀性能的前提下宝穗,減輕主服務器的同步開銷户秤。

image.png

redis集群

參考資料
https://redis.io/
http://redisdoc.com
《Redis實戰(zhàn)》

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市逮矛,隨后出現(xiàn)的幾起案子鸡号,更是在濱河造成了極大的恐慌,老刑警劉巖须鼎,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鲸伴,死亡現(xiàn)場離奇詭異,居然都是意外死亡莉兰,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人斑芜,你說我怎么就攤上這事寻仗。” “怎么了勾缭?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我综看,道長,這世上最難降的妖魔是什么岖食? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任红碑,我火速辦了婚禮,結果婚禮上泡垃,老公的妹妹穿的比我還像新娘析珊。我一直安慰自己,他們只是感情好蔑穴,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布忠寻。 她就那樣靜靜地躺著,像睡著了一般存和。 火紅的嫁衣襯著肌膚如雪奕剃。 梳的紋絲不亂的頭發(fā)上衷旅,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音纵朋,去河邊找鬼柿顶。 笑死,一個胖子當著我的面吹牛倡蝙,可吹牛的內容都是我干的九串。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼寺鸥,長吁一口氣:“原來是場噩夢啊……” “哼猪钮!你這毒婦竟也來了?” 一聲冷哼從身側響起胆建,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤烤低,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后笆载,有當地人在樹林里發(fā)現(xiàn)了一具尸體扑馁,經...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年凉驻,在試婚紗的時候發(fā)現(xiàn)自己被綠了腻要。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡涝登,死狀恐怖雄家,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情胀滚,我是刑警寧澤趟济,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站咽笼,受9級特大地震影響顷编,放射性物質發(fā)生泄漏。R本人自食惡果不足惜剑刑,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一媳纬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧施掏,春花似錦层宫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至抖苦,卻和暖如春毁菱,著一層夾襖步出監(jiān)牢的瞬間米死,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工贮庞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留峦筒,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓窗慎,卻偏偏與公主長得像物喷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子遮斥,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內容

  • 介紹 Redis是一個開源的高性能的key-value存儲系統(tǒng)峦失。具有以下特點:1、Redis支持數據的持久化术吗,可以...
    tracyzht閱讀 10,256評論 0 4
  • 本文將從Redis的基本特性入手较屿,通過講述Redis的數據結構和主要命令對Redis的基本能力進行直觀介紹隧魄。之后概...
    kelgon閱讀 61,130評論 23 626
  • (1)什么是redis? Redis 是一個基于內存的高性能key-value數據庫。 (有空再補充隘蝎,有理解錯誤或...
    走過路過_97c2閱讀 700評論 0 1
  • 關于戀愛嘱么,有句話說得好:要么一直單身狮含,要么戀愛到結婚,何必用青春調教別人的老公還那么認真拱撵。戀愛到結婚辉川,是姑娘們心里...
    陌上花開人未歸閱讀 1,266評論 0 1
  • 今年的十一假期是8天表蝙,想想都好開心啊拴测。但是,今年我們沒有選擇隨波逐流府蛇,而是選擇了在家聽雨集索。原因種種,不再贅...
    甜_sweet閱讀 160評論 0 0