<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          redis面試cheatsheet

          共 1980字,需瀏覽 4分鐘

           ·

          2021-11-15 13:52




          本文總結(jié)一下redis面試中常見考點,如果細節(jié)不懂可以自行搜索相關(guān)文章進行詳細了解。
          后續(xù)如果還有其他常見題還會進行補充,歡迎大家持續(xù)關(guān)注。


          redis的幾種數(shù)據(jù)結(jié)構(gòu)?

          string、list、hash、set、sorted set
          string是二進制安全的,底層用的是sds(簡單動態(tài)字符串,自己實現(xiàn)的數(shù)據(jù)結(jié)構(gòu))
          list可以支持左右插入和刪除,底層是雙向鏈表
          hash、set底層是hashtable,通過掛鏈表解決沖突問題
          sorted set有一個score來進行排序,底層是跳表
          ziplist對數(shù)據(jù)做了一些編碼,提高內(nèi)存使用率,在list,hash,sorted set初始時都是ziplist存儲,達到某些條件才轉(zhuǎn)換成正常數(shù)據(jù)結(jié)構(gòu)。


          redis腳本如何使用?

          使用lua解釋器來執(zhí)行腳本,使用eval命令
          腳本可以方便地實現(xiàn)很多功能,比如唯一隊列
          lua可以保證命令的原子性


          redis實現(xiàn)分布式鎖?

          加鎖:setnx,注意要有過期時間,防止一直死鎖
          過期時間可以隨機,防止雪崩
          set key value ex nx
          釋放鎖:get & del,為了保證原子性,放在lua里執(zhí)行


          java常用的redis客戶端?

          jedis:阻塞IO,同步,線程不安全,需要連接池,僅支持基本數(shù)據(jù)類型
          lettuce:異步,線程安全,基于netty框架的事件驅(qū)動,可以用單個lettuce連接來完成各種操作。
          redission:和lettuce類似,還提供了很多分布式服務(wù)。
          springboot中用rest template,底層默認是lettuce。


          redis單線程?

          redis在進行數(shù)據(jù)操作的時候是單線程,用隊列將并行變成串行,因為數(shù)據(jù)都在內(nèi)存中,單線程操作不需要切換上下文,不需要加鎖,效率最高。
          對于數(shù)據(jù)在磁盤或者網(wǎng)絡(luò)這種IO比較慢的可以考慮多線程。


          redis過期策略?

          惰性刪除,過期了不刪,get的時候刪除。缺點是如果不get就會一直留在內(nèi)存中。
          定期刪除,可以在redis.conf里面配置頻率或者內(nèi)存最大值。
          redis采用惰性刪除+定期刪除


          redis持久化方案?

          首先,redis的優(yōu)勢不在持久化,而在緩存功能,強依賴持久化可以用數(shù)據(jù)庫,放在redis的數(shù)據(jù)必須考慮它可能會丟失。
          RDB:定期存儲,保存數(shù)據(jù)本身
          AOF:保存寫操作日志
          AOF一般大于RDB,性能更低。


          redis雪崩,擊穿?

          擊穿:key過期,key被淘汰。從數(shù)據(jù)庫重新load值。
          雪崩:大量key在同一時間過期。
          如果key過期與時間無關(guān),可以用隨機過期時間
          如果不行,根據(jù)業(yè)務(wù),第一個線程更新所有key


          redis發(fā)布訂閱底層如何實現(xiàn)的?

          subcribe channel
          publish channel message
          服務(wù)端進程中有一個字典,保存了每個channel訂閱的client list,publish channel message的時候,服務(wù)端會找到所有訂閱channel的client,進行消息發(fā)送。


          redis運維常用方法

          連接可以用cli,沒裝cli也可以用telnet連接
          info memory查看內(nèi)存
          線上keys *等命令非常危險,數(shù)據(jù)量大的時候容易阻塞,可以通過重命名或者禁用危險命令。


          redis做了哪些提升性能的事情?

          redis單線程模型
          redis管道,多條命令打包一次性發(fā)送給服務(wù)端
          ziplist提高存儲效率


          redis集群模式

          主從模式:master讀寫,slave只讀,master同步數(shù)據(jù)到slave,master掛了不會再提供寫服務(wù),也不會重新選舉master,只能等master恢復(fù)
          哨兵模式:基于主從模式之上,加入哨兵,哨兵會重新選舉master。哨兵也可以是集群,哨兵每秒發(fā)送PING命令給master,slave和哨兵。哨兵發(fā)現(xiàn)PING命令沒有返回會認為主觀下線,向其他哨兵確認,超過一定數(shù)量主觀下線后會認為客觀下線。在這種模式下,客戶端連接哨兵。
          集群模式:如果數(shù)據(jù)量過大,單機放不下,就需要集群模式,該模式會將數(shù)據(jù)分片
          現(xiàn)在大家一般用云上redis,很少自己搭建集群了。


          考點:一致性Hash,問集群模式的時候可能會問到一致性Hash。

          數(shù)據(jù)Hash對2^32取模,節(jié)點Hash對2^32取模,映射到Hash環(huán)上,數(shù)據(jù)順時針找到最近節(jié)點進行存儲。主要解決節(jié)點增加或者減少,不會導(dǎo)致大量數(shù)據(jù)緩存失效,造成雪崩。數(shù)據(jù)傾斜問題可以用虛擬節(jié)點解決。


          redis適用場景?

          分布式鎖
          session共享,如單點登錄
          分布式業(yè)務(wù)緩存
          排行榜sorted set
          簡單消息,發(fā)布訂閱


          瀏覽 72
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲色基地 | 亚洲成人一区二区 | 影音先锋在线资源自拍 | 大香蕉高清影院 | 亚洲免费AV电影 |