Redis 小記

網(wǎng)絡(luò) IO 模型

redis 采用 io 多路復(fù)用,默認(rèn)采用 epoll 方式仑濒,也提供了 kqueue叹话、select、poll 等實現(xiàn)

單線程設(shè)計

redis 處理網(wǎng)絡(luò)請求是單線程的設(shè)計墩瞳,主要是由于通常情況下 cpu 不是 redis 的瓶頸所在驼壶,內(nèi)存或者網(wǎng)絡(luò)才是主要的瓶頸,同時采用單線程的設(shè)計相對多線程而言可以避免很多問題喉酌,更加簡單

分布式鎖

鎖的獲取

set ${key} ${value} nx ex ${seconds}
# 或
set ${key} ${value} nx px ${milliseconds}

鎖的釋放
需要采用 lua 腳本的方式進行鎖的釋放热凹,采用 lua 的原因是為了釋放的原子性,避免釋放了其他人的鎖

if redis.call("get",KEYS[1]) == ARGV[1] then
    return redis.call("del",KEYS[1])
else
    return 0
end

存在問題
redis 的主從同步是異步復(fù)制泪电,有可能在客戶端 a 獲取鎖的過程中般妙,redis 的主服務(wù)器掛掉,而獲取鎖的 key 未及時同步到從服務(wù)器相速,此時發(fā)生 failover碟渺,從服務(wù)器晉升為主服務(wù)器,另一個客戶端 b 此時進行鎖獲取的操作突诬,由于數(shù)據(jù)未同步苫拍,導(dǎo)致獲取鎖成功,造成同一時間有兩個客戶端獲取鎖

持久化機制

redis 主要有兩種持久化機制:RDB 與 AOF

  1. RDB
    可以理解為一種快照模式旺隙,可以通過 SAVE 或者 BGSAVE (fork 一個子進程)進行 RDB 文件的生成

    • 優(yōu)點
      1. 生成的文件大小相對較小
      2. 重啟恢復(fù)時間較快
    • 缺點
      1. 生成的文件與最新數(shù)據(jù)差距較大绒极,相對于 aof 會丟失更多數(shù)據(jù)
      2. fork 調(diào)用產(chǎn)生子進程在數(shù)據(jù)集較大的情況下相對耗時,在數(shù)據(jù)集較大的情況或者 cpu 性能較差的情況下催束,甚至可能造成幾毫秒到一秒不等的停服時間
  2. AOF (append only file)
    記錄了所有的變更操作,提供了 AOF 的重寫機制

    • 優(yōu)點
      1. 持久性更佳
    • 缺點
      1. 生成文件相對較大
      2. 重啟恢復(fù)時間相對 rdb 而言更長

跳表(skip list)

本身是個很精巧的數(shù)據(jù)結(jié)構(gòu)伏社,跳表在鏈表的基礎(chǔ)上加上多層索引抠刺,擁有 O(log N) 的查詢性能塔淤,同時可以利用鏈表本身的特點很好的支持范圍查詢
在 redis 中的應(yīng)用主要是 zset(sorted set)

內(nèi)存淘汰機制

redis 可以通過 maxmemory 設(shè)置最大內(nèi)存,如果超過該配置將觸發(fā)淘汰機制

maxmemory  <bytes>

通過 maxmemory-policy 進行內(nèi)存淘汰策略的設(shè)置速妖,有 6 種不同的策略可以供選擇高蜂,主要是基于 lru 和 random 刪除兩種策略實現(xiàn),默認(rèn)是不刪除罕容,當(dāng)?shù)竭_ maxmemory 時备恤,將回復(fù)錯誤提示,不影響只讀請求

# volatile-lru -> remove the key with an expire set using an LRU algorithm
# allkeys-lru -> remove any key according to the LRU algorithm
# volatile-random -> remove a random key with an expire set
# allkeys-random -> remove a random key, any key
# volatile-ttl -> remove the key with the nearest expire time (minor TTL)
# noeviction -> don't expire at all, just return an error on write operations
# default
maxmemory-policy noeviction

Redis sentinel(哨兵)

哨兵機制是 redis 實現(xiàn)高可用的方案锦秒,監(jiān)控 redis 的 master 和 slave露泊,在 master 宕機的情況下進行主備切換,保證可用性旅择,哨兵本身也會存在單點問題惭笑,可以部署多個哨兵,組成哨兵集群生真,在 master 出現(xiàn)問題時沉噩,哨兵通過 raft 協(xié)議選出 leader,由哨兵 leader 進行主備切換操作

Redis cluster

redis cluster 是基于 redis 的分布式數(shù)據(jù)庫方案柱蟀,redis cluster 的數(shù)據(jù)分片既不是采用 hash 分布川蒙,也非采用 range 方式,而是采用 slot 的方式進行數(shù)據(jù)的分片长已,key 通過 hash 后對 16384 個 slot 進行取模決定 key 隸屬的 slot畜眨,每個 redis 實例可以被分配若干個 slot

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市痰哨,隨后出現(xiàn)的幾起案子胶果,更是在濱河造成了極大的恐慌,老刑警劉巖斤斧,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件早抠,死亡現(xiàn)場離奇詭異,居然都是意外死亡撬讽,警方通過查閱死者的電腦和手機蕊连,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來游昼,“玉大人甘苍,你說我怎么就攤上這事『嫱悖” “怎么了载庭?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我囚聚,道長靖榕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任顽铸,我火速辦了婚禮茁计,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谓松。我一直安慰自己星压,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布鬼譬。 她就那樣靜靜地躺著娜膘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拧簸。 梳的紋絲不亂的頭發(fā)上劲绪,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天,我揣著相機與錄音盆赤,去河邊找鬼贾富。 笑死,一個胖子當(dāng)著我的面吹牛牺六,可吹牛的內(nèi)容都是我干的颤枪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼淑际,長吁一口氣:“原來是場噩夢啊……” “哼畏纲!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起春缕,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤盗胀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后锄贼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體票灰,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年宅荤,在試婚紗的時候發(fā)現(xiàn)自己被綠了屑迂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡冯键,死狀恐怖惹盼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情惫确,我是刑警寧澤手报,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布蚯舱,位于F島的核電站,受9級特大地震影響掩蛤,放射性物質(zhì)發(fā)生泄漏晓淀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一盏档、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧燥爷,春花似錦蜈亩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至港华,卻和暖如春道川,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背立宜。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工冒萄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人橙数。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓尊流,卻偏偏與公主長得像,于是被迫代替她去往敵國和親灯帮。 傳聞我的和親對象是個殘疾皇子崖技,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,585評論 2 359

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