reids 使用總結(jié)

  • Redis(Remote Dictionary Server) 是一個使用 C 語言編寫的,開源的(BSD許可)高性能非關(guān)系型(NoSQL)的鍵值對數(shù)據(jù)庫蓝撇,鍵的類型只能為字符串果复。
    支持五種基本的數(shù)據(jù)類型:字符串(String)、列表(List)渤昌、集合(Set)虽抄、散列表(Hash)、有序集合(Sort Set)独柑。
    其他高級數(shù)據(jù)類型:HyperLogLog迈窟,發(fā)布訂閱,事務(wù)忌栅,腳本车酣,GEO, Stream

  • 優(yōu)點


讀寫性能優(yōu)異, Redis能讀的速度是110000次/s索绪,寫的速度是81000次/s湖员。

支持?jǐn)?shù)據(jù)持久化,支持AOF和RDB兩種持久化方式瑞驱。

支持事務(wù)娘摔,Redis的所有操作都是原子性的,同時Redis還支持對幾個操作合并后的原子性執(zhí)行唤反。

數(shù)據(jù)結(jié)構(gòu)豐富凳寺,除了支持string類型的value外還支持hash、set彤侍、zset肠缨、list等數(shù)據(jù)結(jié)構(gòu)。

支持主從復(fù)制盏阶,主機(jī)會自動將數(shù)據(jù)同步到從機(jī)晒奕,可以進(jìn)行讀寫分離。
  • Redis應(yīng)用場景

  1. 計數(shù)器
    可以對 String 進(jìn)行自增自減運算般哼,從而實現(xiàn)計數(shù)器功能吴汪。Redis 這種內(nèi)存型數(shù)據(jù)庫的讀寫性能非常高,很適合存儲頻繁讀寫的計數(shù)量蒸眠。
  2. 緩存
    緩存一些熱點數(shù)據(jù)等,也可以緩存序列化后的對象數(shù)據(jù)
  3. 回話緩存
  4. 全頁緩存(?)
  5. 查找表(?)
  6. 消息隊列(訂閱/發(fā)布)
  7. 分布式鎖功能
  8. 其他
    Set 可以實現(xiàn)交集杆融、并集等操作楞卡,從而實現(xiàn)共同好友等功能。ZSet 可以實現(xiàn)有序性操作,從而實現(xiàn)排行榜等功能蒋腮。
  • 持久化

  1. RDB(默認(rèn):如果開啟了持久化淘捡,且沒有配置策略)
    按照一定的時間將內(nèi)存的數(shù)據(jù)以快照的形式保存到硬盤中,對應(yīng)產(chǎn)生的數(shù)據(jù)文件為dump.rdb池摧。通過配置文件中的save參數(shù)來定義快照的周期焦除。
    優(yōu)點:
1. 只有一個文件 dump.rdb,方便持久化作彤。
2. 容災(zāi)性好膘魄,一個文件可以保存到安全的磁盤。
3. 性能最大化竭讳,fork 子進(jìn)程來完成寫操作创葡,讓主進(jìn)程繼續(xù)處理命令,所以是 IO 最大化绢慢。使用單獨子進(jìn)程來進(jìn)行持久化灿渴,主進(jìn)程不會進(jìn)行任何 IO 操作,保證了 redis 的高性能胰舆。
4. 相對于數(shù)據(jù)集大時骚露,啟動恢復(fù)數(shù)據(jù)時比 AOF 的效率更高。

缺點:

1缚窿、數(shù)據(jù)安全性低棘幸。RDB 是間隔一段時間進(jìn)行持久化,如果持久化之間 redis 發(fā)生故障滨攻,會發(fā)生數(shù)據(jù)丟失够话。所以這種方式更適合數(shù)據(jù)要求不嚴(yán)謹(jǐn)?shù)臅r候)
2、AOF(Append-only file)持久化方式:是指所有的命令行記錄以 redis 命令請 求協(xié)議的格式完全持久化存儲)保存為 aof 文件光绕。
  1. AOF
    AOF持久化(即Append Only File持久化)女嘲,則是將Redis執(zhí)行的每次寫命令記錄到單獨的日志文件中,當(dāng)重啟Redis會重新將持久化的日志中文件恢復(fù)數(shù)據(jù)诞帐。
    當(dāng)兩種方式同時開啟時欣尼,數(shù)據(jù)恢復(fù)Redis會優(yōu)先選擇AOF恢復(fù)。
    優(yōu)點:
    1停蕉、數(shù)據(jù)安全愕鼓,aof 持久化可以配置 appendfsync 屬性,有 always慧起,每進(jìn)行一次 命令操作就記錄到 aof 文件中一次菇晃。
    2、通過 append 模式寫文件蚓挤,即使中途服務(wù)器宕機(jī)磺送,可以通過 redis-check-aof 工具解決數(shù)據(jù)一致性問題驻子。
    3、AOF 機(jī)制的 rewrite 模式估灿。AOF 文件沒被 rewrite 之前(文件過大時會對命令 進(jìn)行合并重寫)崇呵,可以刪除其中的某些命令(比如誤操作的 flushall))
    缺點:
    1、AOF 文件比 RDB 文件大馅袁,且恢復(fù)速度慢域慷。
    2、數(shù)據(jù)集大的時候汗销,比 rdb 啟動效率低犹褒。

優(yōu)缺點是什么?
AOF文件比RDB更新頻率高大溜,優(yōu)先使用AOF還原數(shù)據(jù)化漆。
AOF比RDB更安全也更大
RDB性能比AOF好
如果兩個都配了優(yōu)先加載AOF

  • Redis的過期鍵的刪除策略
    Redis的過期策略就是指當(dāng)Redis中緩存的key過期了,Redis如何處理钦奋。
    過期策略通常有以下三種:

    1. 定時過期:每個設(shè)置過期時間的key都需要創(chuàng)建一個定時器座云,到過期時間就會立即清除。該策略可以立即清除過期的數(shù)據(jù)付材,對內(nèi)存很友好朦拖;但是會占用大量的CPU資源去處理過期的數(shù)據(jù),從而影響緩存的響應(yīng)時間和吞吐量
    2. 惰性過期:只有當(dāng)訪問一個key時厌衔,才會判斷該key是否已過期璧帝,過期則清除。該策略可以最大化地節(jié)省CPU資源富寿,卻對內(nèi)存非常不友好睬隶。極端情況可能出現(xiàn)大量的過期key沒有再次被訪問,從而不會被清除页徐,占用大量內(nèi)存苏潜。
    3. 定期過期:每隔一定的時間,會掃描一定數(shù)量的數(shù)據(jù)庫的expires字典中一定數(shù)量的key变勇,并清除其中已過期的key恤左。該策略是前兩者的一個折中方案。通過調(diào)整定時掃描的時間間隔和每次掃描的限定耗時搀绣,可以在不同情況下使得CPU和內(nèi)存資源達(dá)到最優(yōu)的平衡效果飞袋。
      (expires字典會保存所有設(shè)置了過期時間的key的過期時間數(shù)據(jù),其中链患,key是指向鍵空間中的某個鍵的指針巧鸭,value是該鍵的毫秒精度的UNIX時間戳表示的過期時間。鍵空間是指該Redis集群中保存的所有鍵麻捻。)

    Redis中同時使用了惰性過期和定期過期兩種過期策略蹄皱。

  • Redis key的過期時間和永久有效分別怎么設(shè)置览闰?


EXPIRE和PERSIST命令

  • 緩存異常

  1. 緩存雪崩

緩存雪崩是指緩存同一時間大面積的失效芯肤,所以巷折,后面的請求都會落到數(shù)據(jù)庫上,造成數(shù)據(jù)庫短時間內(nèi)承受大量請求而崩掉崖咨。

解決方案

  • 緩存數(shù)據(jù)的過期時間設(shè)置隨機(jī)锻拘,防止同一時間大量數(shù)據(jù)過期現(xiàn)象發(fā)生。
  • 一般并發(fā)量不是特別多的時候击蹲,使用最多的解決方案是加鎖排隊。
  • 給每一個緩存數(shù)據(jù)增加相應(yīng)的緩存標(biāo)記,記錄緩存的是否失效新娜,如果緩存標(biāo)記失效僧著,則更新數(shù)據(jù)緩存。
  1. 緩存穿透

緩存穿透是指緩存和數(shù)據(jù)庫中都沒有的數(shù)據(jù)类咧,導(dǎo)致所有的請求都落到數(shù)據(jù)庫上馒铃,造成數(shù)據(jù)庫短時間內(nèi)承受大量請求而崩掉。

解決方案

  • 接口層增加校驗痕惋,如用戶鑒權(quán)校驗区宇,id做基礎(chǔ)校驗,id<=0的直接攔截值戳;
  • 從緩存取不到的數(shù)據(jù)议谷,在數(shù)據(jù)庫中也沒有取到,這時也可以將key-value對寫為key-null堕虹,緩存有效時間可以設(shè)置短點卧晓,如30秒(設(shè)置太長會導(dǎo)致正常情況也沒法使用)。這樣可以防止攻擊用戶反復(fù)用同一個id暴力攻擊
  • 采用布隆過濾器赴捞,將所有可能存在的數(shù)據(jù)哈希到一個足夠大的 bitmap 中逼裆,一個一定不存在的數(shù)據(jù)會被這個 bitmap 攔截掉,從而避免了對底層存儲系統(tǒng)的查詢壓力
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末螟炫,一起剝皮案震驚了整個濱河市波附,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌昼钻,老刑警劉巖掸屡,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異然评,居然都是意外死亡仅财,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門碗淌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盏求,“玉大人抖锥,你說我怎么就攤上這事∷榉#” “怎么了磅废?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長荆烈。 經(jīng)常有香客問我拯勉,道長,這世上最難降的妖魔是什么憔购? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任宫峦,我火速辦了婚禮,結(jié)果婚禮上玫鸟,老公的妹妹穿的比我還像新娘导绷。我一直安慰自己,他們只是感情好屎飘,可當(dāng)我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布妥曲。 她就那樣靜靜地躺著,像睡著了一般枚碗。 火紅的嫁衣襯著肌膚如雪逾一。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天肮雨,我揣著相機(jī)與錄音遵堵,去河邊找鬼。 笑死怨规,一個胖子當(dāng)著我的面吹牛陌宿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播波丰,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼壳坪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了掰烟?” 一聲冷哼從身側(cè)響起爽蝴,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎纫骑,沒想到半個月后蝎亚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡先馆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年发框,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片煤墙。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡梅惯,死狀恐怖宪拥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情铣减,我是刑警寧澤她君,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站徙歼,受9級特大地震影響犁河,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜魄梯,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宾符。 院中可真熱鬧酿秸,春花似錦、人聲如沸魏烫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哄褒。三九已至稀蟋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間呐赡,已是汗流浹背退客。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留链嘀,地道東北人萌狂。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像怀泊,于是被迫代替她去往敵國和親茫藏。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,779評論 2 354

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