<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

    redis面試cheatsheet

    共 1980字,需瀏覽 4分鐘

     ·

    2021-11-15 13:52




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


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

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


    redis腳本如何使用?

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


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

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


    java常用的redis客戶端?

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


    redis單線程?

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


    redis過期策略?

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


    redis持久化方案?

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


    redis雪崩,擊穿?

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


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

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


    redis運(yùn)維常用方法

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


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

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


    redis集群模式

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


    考點(diǎn):一致性Hash,問集群模式的時(shí)候可能會(huì)問到一致性Hash。

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


    redis適用場景?

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


    瀏覽 72
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)
    評(píng)論
    圖片
    表情
    推薦
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    欧美黄色A片1234区 | 欧美日韩激情在线一区二区三区 | 日韩AV东京热一 | 蜜桃视频人妻 | 国产亚洲aa级大片在线 |