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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

阿里P8亲自讲解!javawhile循环语句用法

發布時間:2023/11/30 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 阿里P8亲自讲解!javawhile循环语句用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

作為一個已經畢業的計算機專業學長,其實幾年大學走來還是挺感慨萬千的。(說明一下:一本,非958、211)
老實說,上大學之前填志愿選專業的時候沒有任何打算,就覺得學海熬到頭了,向往已久的大學舒坦日子要來了,像老一輩人說的“飛出籠的鳥”。
最后選的計算機專業也挺喜劇的,因為愛打游戲,所以覺得自己對計算機還挺感興趣的。當時我并不知道之后我會因為這個決定而改變我的生活。

緩存雪崩

我們首先看下這個正常的緩存流程是怎樣的?如下圖所示:

可以看到,首先這個用戶訪問這個某東,然后這個某東去訪問這個 Redis,如果 Redis 有該訪問數據,就會直接返回查緩存拿到的數據;如果 Redis 緩存沒有查到該數據,就會去 MySql 數據庫中查詢,查詢到有結果把從 MySql 中查到的數據同步至 Redis 緩存中去,同時會把這個查詢到的結果返回回去。

這是一個簡單的正常的緩存流程。 那么我們基于這個正常的緩存流程,來看下什么是緩存的雪崩。

首先給大家舉個例子,就是在雙十一的時候,在某東買東西,進入它的這個首頁,由于是雙十一,首頁的訪問量是非常大的,所以首頁的很多數據是緩存在 redis 里面的。

假設首頁數據存儲在 redis 里的 100 個 key,設置的緩存失效時間是兩個小時,當在雙十一期間,購物超過兩個小時之后,這個首頁數據的 redis 緩存在這瞬間會全部失效,導致所有的請求都打到這個 MySql 數據庫上,此時數據庫的訪問壓力增大,造成這個 MySql 數據庫響應不及時而掛掉,從而某東的首頁就沒辦法繼續對外提供服務了,然后東哥就特別不開心,把這次的技術負責人送去了非洲。

那么通過這個舉例,我們來看下面這個圖:

就是說用戶訪問某東,這個時候 redis 里面的 key 大量失效,導致這個某東直接訪問數據庫,把大量的請求都打到來數據庫,這種現象就是緩存雪崩。簡單來說就是 redis 緩存在同一時間大量失效,就像這個雪崩來了一樣。

那么緩存雪崩它的解決方案有幾種呢?下面來說下:

  • 設置這個緩存的失效時間,不讓大量的 key 在同一時間失效,即在設置這個緩存的時候,可以將 key 的失效時間分散開
  • 我們部署 redis 一般是集群部署的,可以把這些熱點的 key 放到不同的節點上去,讓這些熱點的 key 均勻的分布在不同的 redis 節點上
  • 還有就是比較暴力的方法,不設置這個緩存失效的時間,讓 key 永不失效

緩存穿透

接下來我們再來介紹什么是緩存穿透。

還是舉個例子:比如說某位老哥開發了一個網站,然后這個網站非常的受歡迎,某一天突然遭到了黑客瘋狂的攻擊,他的這個攻擊手段就是采用這個緩存穿透的原理。

大家都知道通常情況下,數據庫的主鍵是從0開始遞增的,是沒有負數的,那么這位黑客就利用這點,他不斷的用 ID 小于零的參數發請求過來。這位老哥剛開始是把網站的所有數據放到了 redis 緩存里面去,但是黑客是用 ID 小于零的數來請求,redis 緩存里面并沒有這個 ID 小于零的數據,這樣 redis 就查不到這個結果,一旦 redis 查不到結果就會去數據庫中查,那么所有請求都會打到數據庫,而且會一直打到數據庫中去,因為 redis 緩存這層根本攔截不到這樣的數據。

redis 緩存直接被這種數據穿透了,直接穿透到數據庫里面。同樣我們來看下面這個圖:

首先這個惡意用戶訪問某東,用 id=-1 的數據去請求,然后這個 id=-1 的數據在 redis 緩存里面沒有查到,就到數據庫里面查詢,也沒有查到該條數據,只能返回空數據給前端了。

這個惡意用戶(黑客)用腳本不斷的發這個數據去請求,直接穿透 redis 打到這個數據庫上,這就是所謂的緩存穿透。 簡單來說,緩存穿透就是指緩存和數據庫中都沒有這樣的數據,一般出現這種情況都不是正常的用戶在訪問。

那么緩存穿透的解決方案有以下幾點:

  • 請求如果穿透 redis,直接到數據庫,那么數據庫無論查出什么結果,都寫回到 redis 緩存里面去,這樣下次用同一個參數發來請求的時候,就直接被 redis 緩存攔截掉了,就不回打到數據庫了
  • 對請求的參數做合法性校驗
  • 比較直接、簡單粗暴的方法,把這個 IP 拉黑
  • 最后是使用布隆過濾器,這是一個非常好的方式

緩存擊穿

我們再來講最后一個問題,就是緩存的擊穿。

還是拿雙十一來舉例:東哥在雙十一的時候,發話說想搞一個大活動,說想把自己20年前用的電腦拿出來拍賣,然后有巨多人對這個電腦感興趣,于是東哥決定在雙十一當天九點拍賣這臺電腦,然后某東的開發程序員,把這臺電腦數據放到了 redis 緩存里,即對應 redis 緩存里的一個 key。

拍賣的時候,大家熱情都非常的高漲,持續拍賣了將近三個小時,還沒有結束這場線上拍賣,但是這臺電腦對應的 redis 緩存 key 的失效時間是三個半小時。 當大家拍賣到三個半小時的時候,這臺電腦的緩存 key 突然失效了,導致這個大量的拍賣請求在 redis 里面查不到數據,從而這些大量請求就會直接打到數據庫上,此時數據庫的瞬間壓力增大,造成響應不及時而掛掉。
這個時候呢,東哥看到自己的這臺電腦還沒拍賣出去,有點生氣,于是把這個程序員送去了非洲。

同樣我們也來看下面這個圖:

用戶訪問某東,然后去 redis 請求某個拍賣秒殺商品,在緩存沒有失效的時候,redis 可以把這個查詢到的緩存 key 的結果返回回去,但是當這個緩存的 key 失效了,這個請求就會擊穿這個 redis,直接打到數據庫上。

這里大家注意的是,這里是某一個熱點的 key,大量的用戶請求不斷的訪問這個熱點的 key,當這個熱點的 key 突然失效,把請求都打到數據庫上,這個過程就是叫做緩存擊穿了。記住它是擊穿某個一個非常熱點的 key

那么這個緩存擊穿的解決方案是:

  • 讓這個熱點 key 不過期,即不設置失效時間(不推薦)
  • 使用分布式鎖,如果是單體應用的話使用互斥鎖(分布式鎖后續文章會講)

最后

經過日積月累, 以下是小編歸納整理的深入了解Java虛擬機文檔,希望可以幫助大家過關斬將順利通過面試。
由于整個文檔比較全面,內容比較多,篇幅不允許,下面以截圖方式展示 。如有需要獲取資料文檔的朋友,可以點擊這里免費獲取






5221)]
[外鏈圖片轉存中…(img-YoWUK1d6-1622525515222)]
[外鏈圖片轉存中…(img-qXCcvmI6-1622525515222)]

由于篇幅限制,文檔的詳解資料太全面,細節內容太多,所以只把部分知識點截圖出來粗略的介紹,每個小節點里面都有更細化的內容!

總結

以上是生活随笔為你收集整理的阿里P8亲自讲解!javawhile循环语句用法的全部內容,希望文章能夠幫你解決所遇到的問題。

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