久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      分享Redis常見面試題

      介紹:Redis 是一個開源的使用 ANSI C 語言編寫、遵守 BSD 協(xié)議、支持網(wǎng)絡、可基于內(nèi)存亦可持久化的日志型、Key-Value 數(shù)據(jù)庫,并提供多種語言的 API的非關(guān)系型數(shù)據(jù)庫。

      推薦:《redis教程》

      傳統(tǒng)數(shù)據(jù)庫遵循 ACID 規(guī)則。而 Nosql(Not Only SQL 的縮寫,是對不同于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)庫管理系統(tǒng)的統(tǒng)稱) 一般為分布式而分布式一般遵循 CAP 定理。

      Github 源碼:https://github.com/antirez/redis

      Redis 官網(wǎng):https://redis.io/

      Redis支持的數(shù)據(jù)類型?

      String字符串:

      格式: set key value

      string類型是二進制安全的。意思是redis的string可以包含任何數(shù)據(jù)。比如jpg圖片或者序列化的對象 。

      string類型是Redis最基本的數(shù)據(jù)類型,一個鍵最大能存儲512MB。

      Hash(哈希)

      格式: hmset name key1 value1 key2 value2

      Redis hash 是一個鍵值(key=>value)對集合。

      Redis hash是一個string類型的field和value的映射表,hash特別適合用于存儲對象。

      List(列表)

      Redis 列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)

      格式: lpush name value

      在 key 對應 list 的頭部添加字符串元素

      格式: rpush name value

      在 key 對應 list 的尾部添加字符串元素

      格式: lrem name index

      key 對應 list 中刪除 count 個和 value 相同的元素

      格式: llen name

      返回 key 對應 list 的長度

      Set(集合)

      格式: sadd name value

      Redis的Set是string類型的無序集合。

      集合是通過哈希表實現(xiàn)的,所以添加,刪除,查找的復雜度都是O(1)。

      zset(sorted set:有序集合)

      格式: zadd name score value

      Redis zset 和 set 一樣也是string類型元素的集合,且不允許重復的成員。

      不同的是每個元素都會關(guān)聯(lián)一個double類型的分數(shù)。redis正是通過分數(shù)來為集合中的成員進行從小到大的排序。

      zset的成員是唯一的,但分數(shù)(score)卻可以重復。

      什么是Redis持久化?Redis有哪幾種持久化方式?優(yōu)缺點是什么?

      持久化就是把內(nèi)存的數(shù)據(jù)寫到磁盤中去,防止服務宕機了內(nèi)存數(shù)據(jù)丟失。

      Redis 提供了兩種持久化方式:RDB(默認) 和AOF

      RDB:

      rdb是Redis DataBase縮寫

      功能核心函數(shù)rdbSave(生成RDB文件)和rdbLoad(從文件加載內(nèi)存)兩個函數(shù)

      分享Redis常見面試題

      AOF:

      Aof是Append-only file縮寫

      分享Redis常見面試題

      每當執(zhí)行服務器(定時)任務或者函數(shù)時flushAppendOnlyFile 函數(shù)都會被調(diào)用, 這個函數(shù)執(zhí)行以下兩個工作

      aof寫入保存:

      WRITE:根據(jù)條件,將 aof_buf 中的緩存寫入到 AOF 文件

      SAVE:根據(jù)條件,調(diào)用 fsync 或 fdatasync 函數(shù),將 AOF 文件保存到磁盤中。

      存儲結(jié)構(gòu):

      內(nèi)容是redis通訊協(xié)議(RESP )格式的命令文本存儲。

      比較

      1、aof文件比rdb更新頻率高,優(yōu)先使用aof還原數(shù)據(jù)。

      2、aof比rdb更安全也更大

      3、rdb性能比aof好

      4、如果兩個都配了優(yōu)先加載AOF

      剛剛上面你有提到redis通訊協(xié)議(RESP ),能解釋下什么是RESP?有什么特點?(可以看到很多面試其實都是連環(huán)炮,面試官其實在等著你回答到這個點,如果你答上了對你的評價就又加了一分)

      RESP 是redis客戶端和服務端之前使用的一種通訊協(xié)議;

      RESP 的特點:實現(xiàn)簡單、快速解析、可讀性好

      For Simple Strings the first byte of the reply is "+" 回復

      For Errors the first byte of the reply is "-" 錯誤

      For Integers the first byte of the reply is ":" 整數(shù)

      For Bulk Strings the first byte of the reply is "$" 字符串

      For Arrays the first byte of the reply is "*" 數(shù)組

      Redis 有哪些架構(gòu)模式?講講各自的特點

      單機版

      分享Redis常見面試題

      特點:簡單

      問題:

      1、內(nèi)存容量有限 2、處理能力有限 3、無法高可用。

      主從復制

      分享Redis常見面試題

      Redis 的復制(replication)功能允許用戶根據(jù)一個 Redis 服務器來創(chuàng)建任意多個該服務器的復制品,其中被復制的服務器為主服務器(master),而通過復制創(chuàng)建出來的服務器復制品則為從服務器(slave)。 只要主從服務器之間的網(wǎng)絡連接正常,主從服務器兩者會具有相同的數(shù)據(jù),主服務器就會一直將發(fā)生在自己身上的數(shù)據(jù)更新同步 給從服務器,從而一直保證主從服務器的數(shù)據(jù)相同。

      特點:

      1、master/slave 角色

      2、master/slave 數(shù)據(jù)相同

      3、降低 master 讀壓力在轉(zhuǎn)交從庫

      問題:

      無法保證高可用

      沒有解決 master 寫的壓力

      哨兵

      分享Redis常見面試題

      Redis sentinel 是一個分布式系統(tǒng)中監(jiān)控 redis 主從服務器,并在主服務器下線時自動進行故障轉(zhuǎn)移。其中三個特性:

      監(jiān)控(Monitoring): Sentinel 會不斷地檢查你的主服務器和從服務器是否運作正常。

      提醒(Notification): 當被監(jiān)控的某個 Redis 服務器出現(xiàn)問題時, Sentinel 可以通過 API 向管理員或者其他應用程序發(fā)送通知。

      自動故障遷移(Automatic failover): 當一個主服務器不能正常工作時, Sentinel 會開始一次自動故障遷移操作。

      特點:

      1、保證高可用

      2、監(jiān)控各個節(jié)點

      3、自動故障遷移

      缺點:主從模式,切換需要時間丟數(shù)據(jù)

      沒有解決 master 寫的壓力

      集群(proxy 型):

      分享Redis常見面試題

      Twemproxy 是一個 Twitter 開源的一個 redis 和 memcache 快速/輕量級代理服務器; Twemproxy 是一個快速的單線程代理程序,支持 Memcached ASCII 協(xié)議和 redis 協(xié)議。

      特點:1、多種 hash 算法:MD5、CRC16、CRC32、CRC32a、hsieh、murmur、Jenkins

      2、支持失敗節(jié)點自動刪除

      3、后端 Sharding 分片邏輯對業(yè)務透明,業(yè)務方的讀寫方式和操作單個 Redis 一致

      缺點:增加了新的 proxy,需要維護其高可用。

      failover 邏輯需要自己實現(xiàn),其本身不能支持故障的自動轉(zhuǎn)移可擴展性差,進行擴縮容都需要手動干預

      集群(直連型):

      分享Redis常見面試題

      從redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用無中心結(jié)構(gòu),每個節(jié)點保存數(shù)據(jù)和整個集群狀態(tài),每個節(jié)點都和其他所有節(jié)點連接。

      特點:

      1、無中心架構(gòu)(不存在哪個節(jié)點影響性能瓶頸),少了 proxy 層。

      2、數(shù)據(jù)按照 slot 存儲分布在多個節(jié)點,節(jié)點間數(shù)據(jù)共享,可動態(tài)調(diào)整數(shù)據(jù)分布。

      3、可擴展性,可線性擴展到 1000 個節(jié)點,節(jié)點可動態(tài)添加或刪除。

      4、高可用性,部分節(jié)點不可用時,集群仍可用。通過增加 Slave 做備份數(shù)據(jù)副本

      5、實現(xiàn)故障自動 failover,節(jié)點之間通過 gossip 協(xié)議交換狀態(tài)信息,用投票機制完成 Slave到 Master 的角色提升。

      缺點:

      1、資源隔離性較差,容易出現(xiàn)相互影響的情況。

      2、數(shù)據(jù)通過異步復制,不保證數(shù)據(jù)的強一致性

      什么是一致性哈希算法?什么是哈希槽?

      Redis常用命令?

      Keys pattern

      *表示區(qū)配所有

      以bit開頭的

      查看Exists key是否存在

      Set

      設置 key 對應的值為 string 類型的 value。

      setnx

      設置 key 對應的值為 string 類型的 value。如果 key 已經(jīng)存在,返回 0,nx 是 not exist 的意思。

      刪除某個key

      第一次返回1 刪除了 第二次返回0

      Expire 設置過期時間(單位秒)

      TTL查看剩下多少時間

      返回負數(shù)則key失效,key不存在了

      Setex

      設置 key 對應的值為 string 類型的 value,并指定此鍵值對應的有效期。

      Mset

      一次設置多個 key 的值,成功返回 ok 表示所有的值都設置了,失敗返回 0 表示沒有任何值被設置。

      Getset

      設置 key 的值,并返回 key 的舊值。

      Mget

      一次獲取多個 key 的值,如果對應 key 不存在,則對應返回 nil。

      Incr

      對 key 的值做加加操作,并返回新的值。注意 incr 一個不是 int 的 value 會返回錯誤,incr 一個不存在的 key,則設置 key 為 1

      incrby

      同 incr 類似,加指定值 ,key 不存在時候會設置 key,并認為原來的 value 是 0

      Decr

      對 key 的值做的是減減操作,decr 一個不存在 key,則設置 key 為-1

      Decrby

      同 decr,減指定值。

      Append

      給指定 key 的字符串值追加 value,返回新字符串值的長度。

      Strlen

      取指定 key 的 value 值的長度。

      persist xxx(取消過期時間)

      選擇數(shù)據(jù)庫(0-15庫)

      Select 0 //選擇數(shù)據(jù)庫

      move age 1//把age 移動到1庫

      Randomkey隨機返回一個key

      Rename重命名

      Type 返回數(shù)據(jù)類型

      08

      使用過Redis分布式鎖么,它是怎么實現(xiàn)的?

      先拿setnx來爭搶鎖,搶到之后,再用expire給鎖加一個過期時間防止鎖忘記了釋放。

      如果在setnx之后執(zhí)行expire之前進程意外crash或者要重啟維護了,那會怎么樣?

      set指令有非常復雜的參數(shù),這個應該是可以同時把setnx和expire合成一條指令來用的!

      09

      使用過Redis做異步隊列么,你是怎么用的?有什么缺點?

      一般使用list結(jié)構(gòu)作為隊列,rpush生產(chǎn)消息,lpop消費消息。當lpop沒有消息的時候,要適當sleep一會再重試。

      缺點:

      在消費者下線的情況下,生產(chǎn)的消息會丟失,得使用專業(yè)的消息隊列如rabbitmq等。

      能不能生產(chǎn)一次消費多次呢?

      使用pub/sub主題訂閱者模式,可以實現(xiàn)1:N的消息隊列。

      10

      什么是緩存穿透?如何避免?什么是緩存雪崩?何如避免?

      緩存穿透

      一般的緩存系統(tǒng),都是按照key去緩存查詢,如果不存在對應的value,就應該去后端系統(tǒng)查找(比如DB)。一些惡意的請求會故意查詢不存在的key,請求量很大,就會對后端系統(tǒng)造成很大的壓力。這就叫做緩存穿透。

      如何避免?

      1:對查詢結(jié)果為空的情況也進行緩存,緩存時間設置短一點,或者該key對應的數(shù)據(jù)insert了之后清理緩存。

      2:對一定不存在的key進行過濾??梢园阉械目赡艽嬖诘膋ey放到一個大的Bitmap中,查詢時通過該bitmap過濾。

      緩存雪崩

      當緩存服務器重啟或者大量緩存集中在某一個時間段失效,這樣在失效的時候,會給后端系統(tǒng)帶來很大壓力。導致系統(tǒng)崩潰。

      如何避免?

      1:在緩存失效后,通過加鎖或者隊列來控制讀數(shù)據(jù)庫寫緩存的線程數(shù)量。比如對某個key只允許一個線程查詢數(shù)據(jù)和寫緩存,其他線程等待。

      2:做二級緩存,A1為原始緩存,A2為拷貝緩存,A1失效時,可以訪問A2,A1緩存失效時間設置為短期,A2設置為長期

      3:不同的key,設置不同的過期時間,讓緩存失效的時間點盡量均勻。

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號