redis學(xué)習(xí)

1. 什么是redis

特點(diǎn)

  1. 高性能
  2. 單線程
  3. 內(nèi)存
  4. 支持持久化
  5. nosql

作用

  1. 緩存
  2. 分布式鎖
  3. 分布式唯一鍵
  4. 隊(duì)列
  5. 會(huì)話

redis配置文件

  1. demonize 是否有守護(hù)進(jìn)程方式啟動(dòng)
  2. bind redis允許哪個(gè)ip可以連接
  3. protested-mode 保護(hù)模式,默認(rèn)啟動(dòng);生效條件:
    ①?zèng)]有配置bind
    ②redis沒有設(shè)置密碼

2. redis五大數(shù)據(jù)類型

2.1 string

2.1.1 通用操作
  1. set key value
  2. get key
  3. del key
  4. append key value
    如果key存在湃鹊,則在value末尾添加;否則同set
  5. strlen key
    返回value長度
  6. mset k1 v1 k2 v2
  7. mget k1 k2
  8. setnx key value
    key存在則不set,key不存在則set key value
2.1.2 value為數(shù)字類型時(shí)
  1. incr key
  2. decr key

2.2 list

有序鏈表奥吩,可以用于實(shí)現(xiàn)隊(duì)列册养,棧等數(shù)據(jù)結(jié)構(gòu)

2.3 set

無序集合傲绣,可以用作微博掠哥、微信等關(guān)注模型。通過集合的交集實(shí)現(xiàn)共同關(guān)注秃诵、通過差集實(shí)現(xiàn)推薦可能認(rèn)識(shí)的人

2.4 zset

有序集合(使用分?jǐn)?shù)排序)
微博熱搜等

2.5 hash

存儲(chǔ)對象

3. redis持久化

3.1 RDB(默認(rèn)方式)

原理
redis會(huì)fork一個(gè)與主進(jìn)程完全一致的進(jìn)程(變量续搀,環(huán)境變量,程序計(jì)數(shù)器)顷链,先將數(shù)據(jù)寫入一個(gè)臨時(shí)文件中目代,待持久化完成之后屈梁,使用該臨時(shí)文件替換原先的持久化文件。整個(gè)持久化過程榛了,不會(huì)影響到主進(jìn)程

文件配置
dir 文件目錄
dbfilename 文件名字

觸發(fā)機(jī)制

  1. shutdown時(shí)在讶,如果沒有aof,會(huì)觸發(fā)
  2. 配置文件中有配置默認(rèn)快照策略時(shí)
    e.g. save 1000 1 1000秒有一次寫操作霜大,則執(zhí)行快照操作
  3. 手動(dòng)執(zhí)行save或bgsave時(shí)
    save:已主進(jìn)程方式進(jìn)行持久化构哺,所有線程阻塞
    bgsave:fork一個(gè)子進(jìn)程來負(fù)責(zé)持久化操作,阻塞只會(huì)發(fā)生在 fork子進(jìn)程的時(shí)候
  4. flushall 無意義


    bgsave.png
#文件目錄
dir ./ 
#文件名稱
dbfilename rdb.dump
# 快照策略
save 900 1
save 300 10
save 60 10000

save VS bgsave

save bgsave
IO類型 同步 同步
是否阻塞其他操作
優(yōu)點(diǎn) 不消化額外內(nèi)存 不阻塞redis其他命令
缺點(diǎn) 阻塞其他命令 fork子進(jìn)程战坤,消息內(nèi)存

3.2 AOF

原理
將redis的所有寫操作命令曙强,以append的方式追加到文件中

文件配置
dir 文件目錄
appendfilename aof文件名
appendonly 是否開啟aof,默認(rèn)關(guān)閉
appendsync 默認(rèn)觸發(fā)機(jī)制

觸發(fā)機(jī)制
no:操作系統(tǒng)進(jìn)行數(shù)據(jù)數(shù)據(jù)緩存到磁盤(快途茫,持久化沒有保證)
always:同步持久化碟嘴,每次數(shù)據(jù)變更時(shí),都會(huì)持久化到磁盤(慢囊卜,安全)
eveerysec:每秒同步一次(默認(rèn)值娜扇,很快,但可能失去1s以內(nèi)的數(shù)據(jù))

aof文件重寫
1.原因:當(dāng)aof文件達(dá)到一定大小(配置項(xiàng))時(shí)栅组,redis會(huì)調(diào)用bgrewriteaof命令對aof文件進(jìn)行重寫雀瓢,減少文件大小

  • 2.重寫方式:跟當(dāng)前內(nèi)存中的數(shù)據(jù)生成對應(yīng)命令,并不需要讀取老的aof文件玉掸、命令整合

2.配置項(xiàng)

  • auto-aof-rewrite-percentage 100
    aof文件增長率超過原始的100%時(shí)刃麸,自動(dòng)重寫aof
  • auto-aof-rewrite-min-size 64mb
    aof文件大小大于該配置時(shí),自動(dòng)重寫aof
aof文件重寫

對于上圖有四個(gè)關(guān)鍵點(diǎn)補(bǔ)充一下:

在重寫期間司浪,由于主進(jìn)程依然在響應(yīng)命令泊业,為了保證最終備份的完整性;因此它依然會(huì)寫入舊的AOF file中断傲,如果重寫失敗脱吱,能夠保證數(shù)據(jù)不丟失智政。
為了把重寫期間響應(yīng)的寫入信息也寫入到新的文件中认罩,因此也會(huì)為子進(jìn)程保留一個(gè)buf,防止新寫的file丟失數(shù)據(jù)续捂。
重寫是直接把當(dāng)前內(nèi)存的數(shù)據(jù)生成對應(yīng)命令垦垂,并不需要讀取老的AOF文件進(jìn)行分析、命令合并牙瓢。
AOF文件直接采用的文本協(xié)議劫拗,主要是兼容性好、追加方便矾克、可讀性高可認(rèn)為修改修復(fù)页慷。

#文件目錄
dir ./  當(dāng)前路徑
#文件名稱
appendfilename "appendonly.aof"
#aof重寫期間是否同步
no-appendfsync-on-rewrite no
# 重寫觸發(fā)配置
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 文件重寫策略
aof-rewrite-incremental-fsync yes

RDB vs AOF

對比項(xiàng) RDB AOF
啟動(dòng)優(yōu)先級(jí)
文件大小
恢復(fù)速度
數(shù)據(jù)安全性 相對高,取決于寫入策略

3.3 混合方式

為了既能像RDB那樣快速恢復(fù),又能像AOF那樣少丟失數(shù)據(jù)酒繁,在redis4.0之后滓彰,支持混合方式持久化,需要開啟參數(shù)

# aof-use-rdb-preamble yes

在aof重寫時(shí)州袒,不再是單純地將內(nèi)存數(shù)據(jù)按照RESP格式寫入AOF文件揭绑,而且將重寫這一刻的內(nèi)存做RDB快照,并將增量數(shù)據(jù)按照RESP格式寫到AOF文件郎哭。重寫完成之前他匪,該文件并不叫appendonly.aof,重寫完成之后覆蓋原有的aof文件

混合持久化的aof文件格式.png

4. redis主從同步

全量復(fù)制:

  1. 從節(jié)點(diǎn)配置好之后會(huì)發(fā)生sync夸研,去連接主節(jié)點(diǎn)
  2. 主節(jié)點(diǎn)執(zhí)行bgsave邦蜜,生產(chǎn)最新的rdb快照
  3. 主節(jié)點(diǎn)將RDB文件發(fā)送給從節(jié)點(diǎn)
  4. 從節(jié)點(diǎn)把收到的數(shù)據(jù)持久化,并加載到內(nèi)存中
  5. 在bgsave之后產(chǎn)生的增量數(shù)據(jù)亥至,主節(jié)點(diǎn)會(huì)緩存在內(nèi)存中畦徘,并將緩存中的數(shù)據(jù)發(fā)給從節(jié)點(diǎn)


    全量復(fù)制.png

如果主從直之間因?yàn)槟撤N原因斷開連接,則從節(jié)點(diǎn)會(huì)再次請求連接主節(jié)點(diǎn)抬闯,在redis2.8版本之前井辆,會(huì)再次執(zhí)行全量復(fù)制,在2.8之后溶握,會(huì)執(zhí)行部分復(fù)制

主從復(fù)制之后杯缺,兩側(cè)數(shù)據(jù)會(huì)維持一個(gè)offset偏移量,當(dāng)主從斷開之后睡榆,從節(jié)點(diǎn)會(huì)再次請求連接主節(jié)點(diǎn)萍肆,請求同步時(shí),會(huì)帶上從節(jié)點(diǎn)已有數(shù)據(jù)的offfset胀屿,如果主節(jié)點(diǎn)的緩存中有該偏移量數(shù)據(jù)塘揣,則直接將該偏移量之后的數(shù)據(jù)一次性發(fā)送給從節(jié)點(diǎn),如果沒有宿崭,則會(huì)觸發(fā)全量復(fù)制


部分復(fù)制.png

5.redis高可用

5.1 緩存穿透

概念解釋:業(yè)務(wù)查詢時(shí)亲铡,緩存為命中,流量全部打到數(shù)據(jù)庫的情況
應(yīng)對措施:
(1)緩存空對象返回葡兑,并設(shè)置過期時(shí)間
如果每次查詢的key均不同奖蔓,且redis中都不存在,會(huì)導(dǎo)致redis中出現(xiàn)很多key(如黑客攻擊時(shí)讹堤,使用不同的key掃描)
(2)布隆過濾器

5.2 緩存擊穿

概念解釋:熱點(diǎn)key訪問時(shí)吆鹤,緩存數(shù)據(jù)并不存在,會(huì)集中訪問DB
應(yīng)對措施:緩存提前預(yù)熱洲守;訪問DB時(shí)疑务,使用分布式鎖(eg:setnx)

5.3 緩存雪崩

概念解釋:(1)redis中的key集中過期沾凄,會(huì)導(dǎo)致請求瞬間打到DB (2)redis掛了,服務(wù)請求打到DB
應(yīng)對措施:
(1)對key值設(shè)置不同的過期時(shí)間
(2)使用redis集群部署或是哨兵模式(現(xiàn)在基本都是使用集群)知允,在redis主節(jié)點(diǎn)掛了之后搭独,從節(jié)點(diǎn)會(huì)通過選取成為主節(jié)點(diǎn),繼續(xù)提供服務(wù)

6.redis開發(fā)規(guī)范建議

6.1 key設(shè)計(jì)

  • key值建議加上業(yè)務(wù)特征廊镜,防止key沖突
  • key不要過長牙肝,如果過長,key較多時(shí)嗤朴,內(nèi)存占用會(huì)很大
  • key值不要包含特殊字符

6.2 value設(shè)計(jì)

value盡量不要過大配椭,防止出現(xiàn)bigkey
bigkey危害:
(1)導(dǎo)致redis阻塞
(2)影響網(wǎng)絡(luò)開銷,value過長雹姊,網(wǎng)卡帶寬被占滿股缸,傳輸效率低
假如一個(gè)bigkey約1M,QPS=1000吱雏,那么每秒就會(huì)產(chǎn)生1000M流量敦姻,如果使用千兆網(wǎng)卡,最大傳輸率為128M/s歧杏,相當(dāng)于每秒才能完成10個(gè)左右的請求镰惦,性能極差
(3)key盡量設(shè)置過期時(shí)間,非必要犬绒,不要常駐內(nèi)存

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末旺入,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子凯力,更是在濱河造成了極大的恐慌茵瘾,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,002評(píng)論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咐鹤,死亡現(xiàn)場離奇詭異拗秘,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)祈惶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門雕旨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人行瑞,你說我怎么就攤上這事奸腺〔徒” “怎么了血久?”我有些...
    開封第一講書人閱讀 169,787評(píng)論 0 365
  • 文/不壞的土叔 我叫張陵,是天一觀的道長帮非。 經(jīng)常有香客問我氧吐,道長讹蘑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,237評(píng)論 1 300
  • 正文 為了忘掉前任筑舅,我火速辦了婚禮座慰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘翠拣。我一直安慰自己版仔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,237評(píng)論 6 398
  • 文/花漫 我一把揭開白布误墓。 她就那樣靜靜地躺著蛮粮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谜慌。 梳的紋絲不亂的頭發(fā)上然想,一...
    開封第一講書人閱讀 52,821評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音欣范,去河邊找鬼变泄。 笑死,一個(gè)胖子當(dāng)著我的面吹牛恼琼,可吹牛的內(nèi)容都是我干的妨蛹。 我是一名探鬼主播,決...
    沈念sama閱讀 41,236評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼晴竞,長吁一口氣:“原來是場噩夢啊……” “哼滑燃!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起颓鲜,我...
    開封第一講書人閱讀 40,196評(píng)論 0 277
  • 序言:老撾萬榮一對情侶失蹤表窘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后甜滨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乐严,經(jīng)...
    沈念sama閱讀 46,716評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,794評(píng)論 3 343
  • 正文 我和宋清朗相戀三年衣摩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了昂验。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,928評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡艾扮,死狀恐怖既琴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情泡嘴,我是刑警寧澤甫恩,帶...
    沈念sama閱讀 36,583評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站酌予,受9級(jí)特大地震影響磺箕,放射性物質(zhì)發(fā)生泄漏奖慌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,264評(píng)論 3 336
  • 文/蒙蒙 一松靡、第九天 我趴在偏房一處隱蔽的房頂上張望简僧。 院中可真熱鬧,春花似錦雕欺、人聲如沸岛马。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛛枚。三九已至,卻和暖如春脸哀,著一層夾襖步出監(jiān)牢的瞬間蹦浦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評(píng)論 1 274
  • 我被黑心中介騙來泰國打工撞蜂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留盲镶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,378評(píng)論 3 379
  • 正文 我出身青樓蝌诡,卻偏偏與公主長得像溉贿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子浦旱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,937評(píng)論 2 361

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