Redis

Redis 簡(jiǎn)介

Redis 是用 C 語言開發(fā)的一個(gè)開源的高性能鍵值對(duì)(key-value)數(shù)據(jù)庫煤蚌。它通過提供多種鍵值數(shù)據(jù)類型來適應(yīng)不同場(chǎng)景下的存儲(chǔ)需求异逐,目前為止 Redis 支持的鍵值數(shù)據(jù)類型如下:

  • 字符串類型
  • 散列類型
  • 列表類型
  • 集合類型
  • 有序集合類型

Redis 的應(yīng)用場(chǎng)景

  • 緩存(數(shù)據(jù)查詢妖胀、短連接银萍、新聞內(nèi)容络凿、商品內(nèi)容等等)
  • 分布式集群架構(gòu)中的 session 分離
  • 聊天室的在線好友列表
  • 任務(wù)隊(duì)列(秒殺憨攒、搶購、12306 等等)
  • 應(yīng)用排行榜
  • 網(wǎng)站訪問統(tǒng)計(jì)
  • 數(shù)據(jù)過期處理(可以精確到毫秒)

Redis HA 方案

HA(High Available惧盹,高可用性群集)機(jī)集群系統(tǒng)簡(jiǎn)稱乳幸,是保證業(yè)務(wù)連續(xù)性的有效解決方案,一般有兩個(gè)或兩個(gè)以上的節(jié)點(diǎn)钧椰,且分為活動(dòng)節(jié)點(diǎn)及備用節(jié)點(diǎn)粹断。通常把正在執(zhí) 行業(yè)務(wù)的稱為活動(dòng)節(jié)點(diǎn),而作為活動(dòng)節(jié)點(diǎn)的一個(gè)備份的則稱為備用節(jié)點(diǎn)嫡霞。當(dāng)活動(dòng)節(jié)點(diǎn)出現(xiàn)問題瓶埋,導(dǎo)致正在運(yùn)行的業(yè)務(wù)(任務(wù))不能正常運(yùn)行時(shí)昔头,備用節(jié)點(diǎn)此時(shí)就會(huì)偵測(cè)到果正,并立即接續(xù)活動(dòng)節(jié)點(diǎn)來執(zhí)行業(yè)務(wù)。從而實(shí)現(xiàn)業(yè)務(wù)的不中斷或短暫中斷斩披。

Redis 一般以主/從方式部署(這里討論的應(yīng)用從實(shí)例主要用于備份端姚,主實(shí)例提供讀寫)該方式要實(shí)現(xiàn) HA 主要有如下幾種方案:

主從及哨兵架構(gòu)

redis cluster集群

Redis一致性哈希算法

將用戶和redis節(jié)點(diǎn)的hash值對(duì)應(yīng)到一個(gè)32位的環(huán)形數(shù)據(jù)結(jié)構(gòu)上闽颇,環(huán)形結(jié)構(gòu)首尾封閉,用戶通過hash算法來定位在環(huán)形結(jié)構(gòu)上寄锐,redis節(jié)點(diǎn)也通過hash算法來定位到環(huán)形結(jié)構(gòu)上,此時(shí)的命中問題就變成了,用戶節(jié)點(diǎn)通過順時(shí)針旋轉(zhuǎn)橄仆,在旋轉(zhuǎn)的過程中若碰到redis節(jié)點(diǎn)剩膘,就在該節(jié)點(diǎn)上讀取數(shù)據(jù),若此時(shí)在環(huán)形結(jié)構(gòu)上增加新的redis節(jié)點(diǎn)盆顾,由于是順時(shí)針尋找對(duì)應(yīng)的redis節(jié)點(diǎn)怠褐,所以用戶此時(shí)的redis命中率還是很高的,不會(huì)因?yàn)樵黾恿艘慌_(tái)redis節(jié)點(diǎn)就導(dǎo)致大量的用戶命中失敗的情況出現(xiàn)您宪。


Redis集群一致性Hash

Redis Sentinel 原理

哨兵架構(gòu)詳解

Redis Sentinel /cluster 集群部署

Redis 命令匯總

參考資料

連接操作相關(guān)的命令

  • ping:測(cè)試連接是否存活如果正常會(huì)返回 pong
  • echo:打印
  • select:切換到指定的數(shù)據(jù)庫奈懒,數(shù)據(jù)庫索引號(hào) index 用數(shù)字值指定,以 0 作為起始索引值
  • quit:關(guān)閉連接(connection)
  • auth:簡(jiǎn)單密碼認(rèn)證

服務(wù)端相關(guān)命令

  • time:返回當(dāng)前服務(wù)器時(shí)間
  • client list: 返回所有連接到服務(wù)器的客戶端信息和統(tǒng)計(jì)數(shù)據(jù) 參見 http://redisdoc.com/server/client_list.html
  • client kill ip:port:關(guān)閉地址為 ip:port 的客戶端
  • save:將數(shù)據(jù)同步保存到磁盤
  • bgsave:將數(shù)據(jù)異步保存到磁盤
  • lastsave:返回上次成功將數(shù)據(jù)保存到磁盤的Unix時(shí)戳
  • shundown:將數(shù)據(jù)同步保存到磁盤宪巨,然后關(guān)閉服務(wù)
  • info:提供服務(wù)器的信息和統(tǒng)計(jì)
  • config resetstat:重置 info 命令中的某些統(tǒng)計(jì)數(shù)據(jù)
  • config get:獲取配置文件信息
  • config set:動(dòng)態(tài)地調(diào)整 Redis 服務(wù)器的配置(configuration)而無須重啟磷杏,可以修改的配置參數(shù)可以使用命令 CONFIG GET * 來列出
  • config rewrite:Redis 服務(wù)器時(shí)所指定的 redis.conf 文件進(jìn)行改寫
  • monitor:實(shí)時(shí)轉(zhuǎn)儲(chǔ)收到的請(qǐng)求
  • slaveof:改變復(fù)制策略設(shè)置

發(fā)布訂閱相關(guān)命令

  • psubscribe:訂閱一個(gè)或多個(gè)符合給定模式的頻道 例如 psubscribe news.* tweet.*
  • publish:將信息 message 發(fā)送到指定的頻道 channel 例如 publish msg "good morning"
  • pubsub channels:列出當(dāng)前的活躍頻道 例如 PUBSUB CHANNELS news.i*
  • pubsub numsub:返回給定頻道的訂閱者數(shù)量 例如 PUBSUB NUMSUB news.it news.internet news.sport news.music
  • pubsub numpat:返回客戶端訂閱的所有模式的數(shù)量總和
  • punsubscribe:指示客戶端退訂所有給定模式。
  • subscribe:訂閱給定的一個(gè)或多個(gè)頻道的信息捏卓。例如 subscribe msg chat_room
  • unsubscribe:指示客戶端退訂給定的頻道极祸。

對(duì) KEY 操作的命令

  • exists(key):確認(rèn)一個(gè) key 是否存在
  • del(key):刪除一個(gè) key
  • type(key):返回值的類型
  • keys(pattern):返回滿足給定 pattern 的所有 key
  • randomkey:隨機(jī)返回 key 空間的一個(gè)
  • keyrename(oldname, newname):重命名 key
  • dbsize:返回當(dāng)前數(shù)據(jù)庫中 key 的數(shù)目
  • expire:設(shè)定一個(gè) key 的活動(dòng)時(shí)間(s)
  • ttl:獲得一個(gè) key 的活動(dòng)時(shí)間
  • move(key, dbindex):移動(dòng)當(dāng)前數(shù)據(jù)庫中的 key 到 dbindex 數(shù)據(jù)庫
  • flushdb:刪除當(dāng)前選擇數(shù)據(jù)庫中的所有 key
  • flushall:刪除所有數(shù)據(jù)庫中的所有 key

對(duì) String 操作的命令

  • set(key, value):給數(shù)據(jù)庫中名稱為 key 的 string 賦予值 value
  • get(key):返回?cái)?shù)據(jù)庫中名稱為 key 的 string 的 value
  • getset(key, value):給名稱為 key 的 string 賦予上一次的 value
  • mget(key1, key2,…, key N):返回庫中多個(gè) string 的 value
  • setnx(key, value):添加 string,名稱為 key怠晴,值為 value
  • setex(key, time, value):向庫中添加 string遥金,設(shè)定過期時(shí)間 time
  • mset(key N, value N):批量設(shè)置多個(gè) string 的值
  • msetnx(key N, value N):如果所有名稱為 key i 的 string 都不存在
  • incr(key):名稱為 key 的 string 增 1 操作
  • incrby(key, integer):名稱為 key 的 string 增加 integer
  • decr(key):名稱為 key 的 string 減 1 操作
  • decrby(key, integer):名稱為 key 的 string 減少 integer
  • append(key, value):名稱為 key 的 string 的值附加 value
  • substr(key, start, end):返回名稱為 key 的 string 的 value 的子串

對(duì) List 操作的命令

  • rpush(key, value):在名稱為 key 的 list 尾添加一個(gè)值為 value 的元素
  • lpush(key, value):在名稱為 key 的 list 頭添加一個(gè)值為 value 的元素
  • llen(key):返回名稱為 key 的 list 的長度
  • lrange(key, start, end):返回名稱為 key 的 list 中 start 至 end 之間的元素
  • ltrim(key, start, end):截取名稱為 key 的 list
  • lindex(key, index):返回名稱為 key 的 list 中 index 位置的元素
  • lset(key, index, value):給名稱為 key 的 list 中 index 位置的元素賦值
  • lrem(key, count, value):刪除 count 個(gè) key 的 list 中值為 value 的元素
  • lpop(key):返回并刪除名稱為 key 的 list 中的首元素
  • rpop(key):返回并刪除名稱為 key 的 list 中的尾元素
  • blpop(key1, key2,… key N, timeout):lpop 命令的 block 版本。
  • brpop(key1, key2,… key N, timeout):rpop 的 block 版本蒜田。
  • rpoplpush(srckey, dstkey):返回并刪除名稱為 srckey 的 list 的尾元素稿械,并將該元素添加到名稱為 dstkey 的 list 的頭部

對(duì) Set 操作的命令

  • sadd(key, member):向名稱為 key 的 set 中添加元素 member
  • srem(key, member) :刪除名稱為 key 的 set 中的元素 member
  • spop(key) :隨機(jī)返回并刪除名稱為 key 的 set 中一個(gè)元素
  • smove(srckey, dstkey, member) :移到集合元素
  • scard(key) :返回名稱為 key 的 set 的基數(shù)
  • sismember(key, member) :member 是否是名稱為 key 的 set 的元素
  • sinter(key1, key2,…key N) :求交集
  • sinterstore(dstkey, (keys)) :求交集并將交集保存到 dstkey 的集合
  • sunion(key1, (keys)) :求并集
  • sunionstore(dstkey, (keys)) :求并集并將并集保存到 dstkey 的集合
  • sdiff(key1, (keys)) :求差集
  • sdiffstore(dstkey, (keys)) :求差集并將差集保存到 dstkey 的集合
  • smembers(key) :返回名稱為 key 的 set 的所有元素
  • srandmember(key) :隨機(jī)返回名稱為 key 的 set 的一個(gè)元素

對(duì) Hash 操作的命令

  • hset(key, field, value):向名稱為 key 的 hash 中添加元素 field
  • hget(key, field):返回名稱為 key 的 hash 中 field 對(duì)應(yīng)的 value
  • hmget(key, (fields)):返回名稱為 key 的 hash 中 field i 對(duì)應(yīng)的 value
  • hmset(key, (fields)):向名稱為 key 的 hash 中添加元素 field
  • hincrby(key, field, integer):將名稱為 key 的 hash 中 field 的 value 增加 integer
  • hexists(key, field):名稱為 key 的 hash 中是否存在鍵為 field 的域
  • hdel(key, field):刪除名稱為 key 的 hash 中鍵為 field 的域
  • hlen(key):返回名稱為 key 的 hash 中元素個(gè)數(shù)
  • hkeys(key):返回名稱為 key 的 hash 中所有鍵
  • hvals(key):返回名稱為 key 的 hash 中所有鍵對(duì)應(yīng)的 value
  • hgetall(key):返回名稱為 key 的 hash 中所有的鍵(field)及其對(duì)應(yīng)的 value

Redis Sentinel

  • ping :返回 pong
  • sentinel masters :列出所有被監(jiān)視的主服務(wù)器,以及這些主服務(wù)器的當(dāng)前狀態(tài)冲粤。
  • sentinel slaves:列出給定主服務(wù)器的所有從服務(wù)器美莫,以及這些從服務(wù)器的當(dāng)前狀態(tài)。
  • sentinel get-master-addr-by-name:返回給定名字的主服務(wù)器的 IP 地址和端口號(hào)色解。如果這個(gè)主服務(wù)器正在執(zhí)行故障轉(zhuǎn)移操作茂嗓,或者針對(duì)這個(gè)主服務(wù)器的故障轉(zhuǎn)移操作已經(jīng)完成,那么這個(gè)命令返回新的主服務(wù)器的 IP 地址和端口號(hào)科阎。
  • sentinel reset:重置所有名字和給定模式 pattern 相匹配的主服務(wù)器述吸。pattern 參數(shù)是一個(gè) Glob 風(fēng)格的模式 重置操作清楚主服務(wù)器目前的所有狀態(tài),包括正在執(zhí)行中的故障轉(zhuǎn)移锣笨,并移除目前已經(jīng)發(fā)現(xiàn)和關(guān)聯(lián)的蝌矛,主服務(wù)器的所有從服務(wù)器和 Sentinel 。
  • sentinel failover:當(dāng)主服務(wù)器失效時(shí)错英,在不詢問其他 Sentinel 意見的情況下入撒,強(qiáng)制開始一次自動(dòng)故障遷移(不過發(fā)起故障轉(zhuǎn)移的 Sentinel 會(huì)向其他 Sentinel 發(fā)送一個(gè)新的配置,其他 Sentinel 會(huì)根據(jù)這個(gè)配置進(jìn)行相應(yīng)的更新)椭岩。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末茅逮,一起剝皮案震驚了整個(gè)濱河市璃赡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌献雅,老刑警劉巖碉考,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異挺身,居然都是意外死亡侯谁,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門章钾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來墙贱,“玉大人,你說我怎么就攤上這事贱傀〔移玻” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵窍箍,是天一觀的道長串纺。 經(jīng)常有香客問我,道長椰棘,這世上最難降的妖魔是什么纺棺? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮邪狞,結(jié)果婚禮上祷蝌,老公的妹妹穿的比我還像新娘。我一直安慰自己帆卓,他們只是感情好巨朦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著剑令,像睡著了一般糊啡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吁津,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天棚蓄,我揣著相機(jī)與錄音,去河邊找鬼碍脏。 笑死梭依,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的典尾。 我是一名探鬼主播役拴,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼钾埂!你這毒婦竟也來了河闰?” 一聲冷哼從身側(cè)響起科平,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎姜性,沒想到半個(gè)月后匠抗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡污抬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了绳军。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片印机。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖门驾,靈堂內(nèi)的尸體忽然破棺而出射赛,到底是詐尸還是另有隱情,我是刑警寧澤奶是,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布楣责,位于F島的核電站,受9級(jí)特大地震影響聂沙,放射性物質(zhì)發(fā)生泄漏秆麸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一及汉、第九天 我趴在偏房一處隱蔽的房頂上張望沮趣。 院中可真熱鬧,春花似錦坷随、人聲如沸房铭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缸匪。三九已至,卻和暖如春类溢,著一層夾襖步出監(jiān)牢的瞬間凌蔬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國打工豌骏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留龟梦,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓窃躲,卻偏偏與公主長得像计贰,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蒂窒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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

  • 原帖地址:http://www.reibang.com/p/2f14bc570563 redis概述 Redis...
    onlyHalfSoul閱讀 2,168評(píng)論 0 28
  • NOSQL類型簡(jiǎn)介鍵值對(duì):會(huì)使用到一個(gè)哈希表躁倒,表中有一個(gè)特定的鍵和一個(gè)指針指向特定的數(shù)據(jù)荞怒,如redis,volde...
    MicoCube閱讀 3,981評(píng)論 2 27
  • 轉(zhuǎn)載:Redis 寶典 | 基礎(chǔ)、高級(jí)特性與性能調(diào)優(yōu) 本文由 DevOpsDays 本文由簡(jiǎn)書作者kelgon供稿...
    meng_philip123閱讀 3,125評(píng)論 1 34
  • Redis是啥 Redis是一個(gè)開源的key-value存儲(chǔ)系統(tǒng)象迎,由于擁有豐富的數(shù)據(jù)結(jié)構(gòu)荧嵌,又被其作者戲稱為數(shù)據(jù)結(jié)構(gòu)...
    一凡呀閱讀 1,173評(píng)論 0 5
  • 本文為筆者對(duì)在學(xué)習(xí)Redis過程中所收集資料的一個(gè)總結(jié),目的是為了以后方便回顧相關(guān)的知識(shí),大部分為非原創(chuàng)內(nèi)容砾淌。特此...
    EakonZhao閱讀 14,433評(píng)論 0 9