日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

凉凉!面试阿里我被Redis技术专题给搞的昏倒在地~

發布時間:2023/12/4 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 凉凉!面试阿里我被Redis技术专题给搞的昏倒在地~ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

涼涼!面試阿里我被Redis技術專題給弄死了~

📚我本以為我可以像是別的博主一樣去阿里面試隨隨便便,因為Redis,我直接被阿里大佬淦翻在地上

好了不裝了 沒過沒關系 我總結了一些這些最難的知識點!!!!然后自己總結歸類再去百度查詢了一些 最終得出這份Redis技術專題

題目開淦

Redis集群的主從復制模型是怎樣的?

為了是在部分節點失敗或者大部分節點無法通信的情況下集群仍然可用,所以集群是用了主從復制模型,每個節點都會有N-1個復制品

Redis集群會有寫操作丟失嗎?為什么?

Redis并不能保證數據強一致性,這意味著在實際中集群在特定的條件下可能會丟失寫操作

Redis集群之間是如何復制的

異步復制

Redis如何做內存優化

盡可能使用散列表(hashes),散列表(是說列表里面存儲的數少)使用的內存非常小,所以你應該盡可能的將你的數據模型抽象到一個散列表里面,比如你的web系統中有一個用戶對象,不要為這個用戶的名稱,姓氏,郵箱,密碼設置單獨的key,而是應該把這個用戶所有信息存儲到一張散列表中

Redis回收進程如何工作?

一個Client運行了新的命令,添加了新的數據,Redis會檢查內存使用情況,如果大于maxmemory的限制,則根據設定好的策略進行回收

Redis支持哪幾種常用數據類型?

  • String(字符串)
  • List(列表)
  • Set(集合)
  • Sorted Set(有序集合)
  • hash(哈希表)

Redis 與 memcached 相比有哪些優勢?(主要是Redis的優勢)

  • 1.memcached所有的值均是簡單的字符串,redis支持更為豐富的數據類型。
  • 2.redis的速度比memcached快很多,redis的速度比memcached快很多(有爭議,考慮到Memache多線程可以充分利用多核,在考慮6.0后的Redis支持多線程,所以存在版本的概念)。
  • 3.redis可以持久化其數據redis可以持久化其數據,數據的可靠性和一致性更高。
  • 4.redis單個key存儲的value可以達到1G而Memcache只有1M存儲大小。
  • 5.redis對集群情況下的高可用支持的方案很多,所以集群情況下高可用更好。
  • 6.針對于第一條的補充,包含功能場景的豐富化,比如,消息隊列、原子操作處 理(Lua腳本以及自增自減的操作)、事務機制和延時隊列機制等等功能。
  • 7.采用的網絡模型非常好(epoll機制)擯棄給純內存考慮,并且采用了內部共享內存池機制(可以復用內存,惰性分配),采用單線程機制減少用戶態和內核態的切換以及線程之間上下文的切換。

Redis 集群方案應該怎么做?都有哪些方案?

  • codis目前用的最多的集群方案,屬于一個基于服務端操作的負載均衡機制屬于代理后端服務實例的機制,可以支持1024的集群節點,但它支持在節點數量改變情況下,舊節點數據可恢復到新hash(CRC32算法)節點。//加入Java開發交流君樣:756584822一起吹水聊天
  • twemproxy ,基本和codis一致的效果,但是對于節點變化的情況處理不是很好,所以性能方面來講依賴于twemproxy的節點的吞吐能力。
  • redis cluster3.0 自帶的集群,特點在于他的分布式算法不是一致性hash,而是 hash槽(slot)的概念,以及自身支持節點設置從節點,并且節點之間都有引用鏈接關系幫助定位hash槽的數據,支持節點達到16384個節點。

(Redis)什么是緩存擊穿?如何避免?

高并發的系統中,大量的請求同時查詢一個 key 時,此時這個key正好失效了,就會導致大量的請求都打到數據庫上面去。這種現象我們稱為緩存擊穿。

📚如何避免?

  • 1:在緩存失效后,通過加鎖或者隊列來控制讀數據庫寫緩存的線程數量。比如對某個 key 只允許一個線程查詢數據和寫緩存,其他線程等待,等第一個線程查詢到了數據,然后做緩存。后面的線程進來發現已經有緩存了,就直接走緩存。
  • 2:做二級緩存,A1 為原始緩存,A2 為拷貝緩存,A1 失效時,可以訪問 A2,A1 緩存失效時間設置為短期,A2 設置為長期,犧牲一致性,提高可用性
  • 3:設置熱點數據永遠不過期(不推薦哦)。

Redis如何實現高可用呢?

Redis實現高可用主要有三種方式:主從復制、哨兵模式,以及 Redis 集群。

📚主從復制

將從前的一臺 Redis 服務器,同步數據到多臺從 Redis 服務器上,即一主多從的模式,這個跟MySQL主從復制的原理一樣。

📚主從復制哨兵模式

使用 Redis 主從服務的時候,會有一個問題,就是當 Redis 的主從服務器出現故障宕機時,需要手動進行恢復,為了解決這個問題,Redis 增加了哨兵模式(因為哨兵模式做到了可以監控主從服務器,并且提供自動容災恢復的功能)。

📚Redis Cluster(集群)
Redis Cluster 是一種分布式去中心化的運行模式,是在 Redis 3.0 版本中推出的 Redis 集群方案,它將數據分布在不同的服務器上,以此來降低系統對單主節點的依賴,從而提高 Redis 服務的讀寫性能。

使用哨兵模式在數據上有副本數據做保證,在可用性上又有哨兵監控,一旦master宕機會選舉slave節點為master節點,這種已經滿足了我們的生產環境需要,那為什么還需要使用集群模式呢?

哨兵模式歸根節點還是主從模式,在主從模式下我們可以通過增加slave節點來擴展讀并發能力,但是沒辦法擴展寫能力和存儲能力,存儲能力只能是master節點能夠承載的上限。所以為了擴展寫能力和存儲能力,我們就需要引入集群模式。

Redis為何那么快???

Redis的快速很多人都知道是因為基于內存,但這只是一方面,其實redis在底層是一套很完善的多路復用事件處理機制來保證執行的高效的

線程模型
redis內部使用文件事件處理器file event handler,它包含如下幾個部分

  • 多個socket
  • IO多路復用程序
  • 文件事件分派器
  • 事件處理器(連接應答處理器,命令請求處理器,命令回復處理器)

之所以說redis是單線程其實是指這個文件事件處理器是單線程的,它采用多路復用的方式監聽系統上多個socket,將socket上產生的事件壓入隊列中,由文件事件分派器從隊列中取出一個socket根據事件類型發給相應的事件處理器
整個處理過程如圖:

處理過程可以分為以下幾個步驟:

  • 客戶端向redis發起一個socket請求,向redis的server socket請求連接,這里命名為socket01
  • server socket產生一個AE_READABLE事件,IO多路復用程序監聽到事件后將這個socket01壓入隊列
  • 文件事件分派器從隊列中取出socket01,交給連接應答處理器
  • 連接應答處理器會將socket01的AE_READABLE事件與命令請求處理器相關聯
  • 假設客戶端執行set操作,這時命令請求處理器會從socket01讀取key value,在內存中完成key value的設置
  • 在內存中完成設置后,會將socket01的AE_WRITEABLE事件與命令回復處理器相關聯,然后壓入隊列中
  • 事件分派器拿到socket01后,交給命令回復處理器,由命令回復處理器向socket01寫入本次操作的結果,比如OK,之后解除關聯

以上就是一個命令在redis中執行的過程

總結一下效率高的原因

  • 內存操作
  • IO多路復用機制,減少了阻塞
  • 單線程避免了線程切換的開銷和競爭問題
  • 最最根本的redis是用C語言寫的,本來就直接跟操作系統交互,命令執行快得飛起

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的凉凉!面试阿里我被Redis技术专题给搞的昏倒在地~的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。