大宇java面試系列(三):Redis基礎知識點电湘!

1. Redis 是什么?都有哪些使用場景鹅经?

我們先來理解經典的CAP理論

一致性:是指從數(shù)據(jù)層面來看的一致性寂呛。

可用性:是指從系統(tǒng)層面的可用性。

容錯性:是指從網(wǎng)絡層面的的容錯性瘾晃。

數(shù)據(jù)庫逐漸從關系數(shù)據(jù)庫向不同領域不同層次分化贷痪。隨著讀多寫少場景的出現(xiàn),導致需要讀取數(shù)據(jù)的時間變慢酗捌,為了提升性能呢诬,出現(xiàn)了數(shù)據(jù)庫緩存技術,對數(shù)據(jù)庫的讀取進行分離胖缤。web2.0時代尚镰,網(wǎng)民的生產力大增,存儲總量也在增加哪廓,目前還是讀多寫少模式狗唉,原有的緩存技術顯然不能滿足寫的壓力,所以涡真,出現(xiàn)了分庫分表分俯,實現(xiàn)讀寫分離肾筐。其中比較常用的一種緩存技術是用Redis做緩存。

Redis是什么缸剪?

Redis是一個基于內存且支持持久化的key-value的NoSQL數(shù)據(jù)庫吗铐,其中每個key和value都是使用對象表示的,具有以以下特征:多樣數(shù)據(jù)類型杏节、持久化唬渗、主從同步。

和Memcached類似奋渔,它支持存儲的value類型相對更多镊逝,包括string(字符串)、list(鏈表)嫉鲸、set(集合)和zset(有序集合)撑蒜。這些數(shù)據(jù)類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作玄渗,而且這些操作都是原子性的座菠。

在此基礎上,redis支持各種不同方式的排序捻爷。與memcached一樣辈灼,為了保證效率,數(shù)據(jù)都是緩存在內存中也榄。區(qū)別的是redis會周期性的使用RDB快照的方式巡莹,把更新的數(shù)據(jù)寫入磁盤或者使用類似MySQL的AOF日志方式把修改操作寫入追加的記錄文件,并且在此基礎上實現(xiàn)了master-slave(主從)同步甜紫。Redis支持將數(shù)據(jù)同步到多臺從數(shù)據(jù)庫上降宅,這種特性對提高讀取性能非常有益。

Redis3.0版本允許單點故障囚霸,它沒有中心節(jié)點腰根,各個節(jié)點地位一樣,擴展性很好拓型,節(jié)點間的采用二進制通信额嘿,節(jié)點與客戶端采用ascII協(xié)議通信。

綜上所述劣挫,Redis可用于緩存册养、數(shù)據(jù)庫、消息中間件压固。

Redis 使用場景:

記錄帖子點贊數(shù)球拦、點擊數(shù)、評論數(shù);

緩存近期熱帖坎炼;

緩存文章詳情信息愧膀;

記錄用戶會話信息。

2. Redis 有哪些功能谣光?

數(shù)據(jù)緩存功能

分布式鎖的功能

支持數(shù)據(jù)持久化

支持事務

支持消息隊列

3. Redis 和 memcache 有什么區(qū)別檩淋?

存儲方式不同:memcache 把數(shù)據(jù)全部存在內存之中,斷電后會掛掉萄金,數(shù)據(jù)不能超過內存大欣桥ァ;Redis 有部份存在硬盤上捡絮,這樣能保證數(shù)據(jù)的持久性。

數(shù)據(jù)支持類型:memcache 對數(shù)據(jù)類型支持相對簡單莲镣;Redis 有復雜的數(shù)據(jù)類型福稳。

使用底層模型不同:它們之間底層實現(xiàn)方式,以及與客戶端之間通信的應用協(xié)議不一樣瑞侮,Redis 自己構建了 vm 機制的圆,因為一般的系統(tǒng)調用系統(tǒng)函數(shù)的話,會浪費一定的時間去移動和請求半火。

value 值大小不同:Redis 最大可以達到 1gb越妈;memcache 只有 1mb。

4. Redis 為什么是單線程的钮糖?

因為 cpu 不是 Redis 的瓶頸梅掠,Redis 的瓶頸最有可能是機器內存或者網(wǎng)絡帶寬。既然單線程容易實現(xiàn)店归,而且 cpu 又不會成為瓶頸阎抒,那就順理成章地采用單線程的方案了。

關于 Redis 的性能消痛,官方網(wǎng)站也有且叁,普通筆記本輕松處理每秒幾十萬的請求。

而且單線程并不代表就慢 nginx 和 nodejs 也都是高性能單線程的代表秩伞。

5. 什么是緩存穿透逞带?怎么解決?

緩存穿透:指查詢一個一定不存在的數(shù)據(jù)纱新,由于緩存是不命中時需要從數(shù)據(jù)庫查詢展氓,查不到數(shù)據(jù)則不寫入緩存,這將導致這個不存在的數(shù)據(jù)每次請求都要到數(shù)據(jù)庫去查詢怒炸,造成緩存穿透带饱。

解決方案:最簡單粗暴的方法如果一個查詢返回的數(shù)據(jù)為空(不管是數(shù)據(jù)不存在,還是系統(tǒng)故障),我們就把這個空結果進行緩存勺疼,但它的過期時間會很短教寂,最長不超過五分鐘。

6. Redis 支持的數(shù)據(jù)類型有哪些执庐?

Redis 支持的數(shù)據(jù)類型:string(字符串)酪耕、list(列表)、hash(字典)轨淌、set(集合)迂烁、zset(有序集合)。

7. Redis 支持的 Java 客戶端都有哪些递鹉?

支持的 Java 客戶端有 Redisson盟步、jedis、lettuce 等躏结。

8. jedis 和 Redisson 有哪些區(qū)別却盘?

jedis:提供了比較全面的 Redis 命令的支持。

Redisson:實現(xiàn)了分布式和可擴展的 Java 數(shù)據(jù)結構媳拴,與 jedis 相比 Redisson 的功能相對簡單黄橘,不支持排序、事務屈溉、管道塞关、分區(qū)等 Redis 特性。

9. 怎么保證緩存和數(shù)據(jù)庫數(shù)據(jù)的一致性子巾?

合理設置緩存的過期時間帆赢。

新增、更改线梗、刪除數(shù)據(jù)庫操作時同步更新 Redis匿醒,可以使用事物機制來保證數(shù)據(jù)的一致性。

10. Redis 持久化有幾種方式缠导?

Redis 的持久化有兩種方式廉羔,或者說有兩種策略:

RDB(Redis Database):指定的時間間隔能對你的數(shù)據(jù)進行快照存儲。

AOF(Append Only File):每一個收到的寫命令都通過write函數(shù)追加到文件中僻造。

11. Redis 怎么實現(xiàn)分布式鎖憋他?

Redis 分布式鎖其實就是在系統(tǒng)里面占一個“坑”,其他程序也要占“坑”的時候髓削,占用成功了就可以繼續(xù)執(zhí)行竹挡,失敗了就只能放棄或稍后重試。

占坑一般使用 setnx(set if not exists)指令立膛,只允許被一個程序占有揪罕,使用完調用 del 釋放鎖梯码。

12. Redis 分布式鎖有什么缺陷?

Redis 分布式鎖不能解決超時的問題好啰,分布式鎖有一個超時時間轩娶,程序的執(zhí)行如果超出了鎖的超時時間就會出現(xiàn)問題。

13. Redis 如何做內存優(yōu)化框往?

盡量使用 Redis 的散列表鳄抒,把相關的信息放到散列表里面存儲,而不是把每個字段單獨存儲椰弊,這樣可以有效的減少內存使用许溅。比如將 Web 系統(tǒng)的用戶對象,應該放到散列表里面再整體存儲到 Redis秉版,而不是把用戶的姓名贤重、年齡、密碼清焕、郵箱等字段分別設置 key 進行存儲游桩。

14. Redis 淘汰策略有哪些?

volatile-lru:從已設置過期時間的數(shù)據(jù)集(server. db[i]. expires)中挑選最近最少使用的數(shù)據(jù)淘汰耐朴。

volatile-ttl:從已設置過期時間的數(shù)據(jù)集(server. db[i]. expires)中挑選將要過期的數(shù)據(jù)淘汰。

volatile-random:從已設置過期時間的數(shù)據(jù)集(server. db[i]. expires)中任意選擇數(shù)據(jù)淘汰盹憎。

allkeys-lru:從數(shù)據(jù)集(server. db[i]. dict)中挑選最近最少使用的數(shù)據(jù)淘汰筛峭。

allkeys-random:從數(shù)據(jù)集(server. db[i]. dict)中任意選擇數(shù)據(jù)淘汰。

no-enviction(驅逐):禁止驅逐數(shù)據(jù)陪每。

15. Redis 常見的性能問題有哪些影晓?該如何解決?

主服務器寫內存快照檩禾,會阻塞主線程的工作挂签,當快照比較大時對性能影響是非常大的,會間斷性暫停服務盼产,所以主服務器最好不要寫內存快照饵婆。

Redis 主從復制的性能問題,為了主從復制的速度和連接的穩(wěn)定性戏售,主從庫最好在同一個局域網(wǎng)內侨核。

如果您感覺文章對您有所幫助,請讓更多人看到灌灾!

1.點贊此篇文章搓译,并評論一句!

2.轉發(fā)此篇文章 給予作者支持锋喜!

3.微信搜索 ~ 關注微信公眾號:程序員知識碼頭? 獲取學習資料一份些己,每天準時發(fā)技術文章豌鸡!

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市段标,隨后出現(xiàn)的幾起案子涯冠,更是在濱河造成了極大的恐慌,老刑警劉巖怀樟,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件功偿,死亡現(xiàn)場離奇詭異,居然都是意外死亡往堡,警方通過查閱死者的電腦和手機械荷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虑灰,“玉大人吨瞎,你說我怎么就攤上這事∧赂溃” “怎么了颤诀?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長对湃。 經常有香客問我崖叫,道長,這世上最難降的妖魔是什么拍柒? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任心傀,我火速辦了婚禮,結果婚禮上拆讯,老公的妹妹穿的比我還像新娘脂男。我一直安慰自己,他們只是感情好种呐,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布宰翅。 她就那樣靜靜地躺著,像睡著了一般爽室。 火紅的嫁衣襯著肌膚如雪汁讼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天阔墩,我揣著相機與錄音掉缺,去河邊找鬼。 笑死戈擒,一個胖子當著我的面吹牛眶明,可吹牛的內容都是我干的。 我是一名探鬼主播筐高,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼搜囱,長吁一口氣:“原來是場噩夢啊……” “哼丑瞧!你這毒婦竟也來了?” 一聲冷哼從身側響起蜀肘,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤绊汹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后扮宠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體西乖,經...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年坛增,在試婚紗的時候發(fā)現(xiàn)自己被綠了获雕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡收捣,死狀恐怖届案,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情罢艾,我是刑警寧澤楣颠,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站咐蚯,受9級特大地震影響童漩,放射性物質發(fā)生泄漏。R本人自食惡果不足惜春锋,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一矫膨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧看疙,春花似錦、人聲如沸直奋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脚线。三九已至搁胆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間邮绿,已是汗流浹背渠旁。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留船逮,地道東北人顾腊。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像挖胃,于是被迫代替她去往敵國和親杂靶。 傳聞我的和親對象是個殘疾皇子梆惯,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內容