從入門到精通!java可視化編程軟件哪個好

1、我往Redis里寫的數據怎么沒了?

使用Redis的同學你要明白一點,你為什么用Redis?用redis的作用是什么?用redis的好處是什么?凡事多思考一下為什么,多想想背后的原因。

就在不久前有朋友跟我說過,說他們生產環境的Redis怎么經常會丟掉一些數據?寫進去了,過一會兒可能就沒了。我的天啊,你問這個問題就說明Redis你就沒用對啊。Redis是緩存,你給當存儲了用了是吧?

首先要明白一點啥叫緩存?為啥用緩存?

Redis是用內存當緩存的。內存是無限的嗎?相反,內存是很寶貴而且是有限的,磁盤是廉價而且是大量的。可能一臺機器就幾十個G的內存,但是可以有幾個T的硬盤空間。Redis主要是基于內存來進行高性能、高并發的讀寫操作的。

那既然內存是有限的,比如Redis就只能用10個G,你一直往里面寫數據,一直寫一直寫最后10個G都用的差不多了,你還寫會,你想想會發生什么?當然會干掉一些的數據了,然后就保留10個G的數據。你說會不會造成數據丟失?

那Redis會干掉哪些數據?保留哪些數據呢?當然是干掉不常用的數據,保留常用的數據了。

所以說,這是緩存的一個最基本的概念:數據是會過期的。要么是你自己設置個過期時間,要么是Redis自己給干掉。

所以你的Redis如果使用不當,把生產數據存到里面,又沒有去持久化到mysql,那就會有丟失的可能。

2、我的數據明明都過期了,怎么還占用著內存啊?

還有一種就是如果你給key設置好了一個過期時間,你知道到一定的時間再去查這個key就沒有了,但是你知道redis是怎么給你弄成過期的嗎?什么時候刪除掉?

如果你不知道,在實際的使用過程中你就可能會發現這么一個問題:為啥好多數據明明應該過期了,結果發現redis內存占用還是很高?那是因為你不知道Redis是怎么刪除那些過期key的

舉例,Redis 內存一共是10個G,你現在往里面寫了5個G的數據,然后你對這些數據全都設置了10分鐘之后過期,結果10分鐘之后,你再來查看看,Redis的內存使用率怎么還是50%呢?5個G的數據都過期了,我從redis里查,是查不到了,結果過期的數據為啥還占用著Redis的內存呢。

如果你連這個問題都不知道,上來就懵了,回答不出來,建議你使用Redis之前多做做功課,不然你寫代碼的時候,想當然的認為寫進Redis的數據就一定會存在,后面導致系統各種漏洞和bug,就不好弄了。

3、問題剖析

(1)設置過期時間

set key value 過期時間(1小時)表示set進去的key,1小時之后就沒了,就失效了。

我們set key的時候,都可以給一個expire time,就是過期時間,指定這個key比如說只能存活1個小時?10分鐘?這個很有用,我們自己可以指定緩存到期就失效。

如果假設你設置一批key只能存活1個小時,那么接下來1小時后,redis是怎么對這批key進行刪除的?

答案是:定期刪除+惰性刪除

所謂定期刪除,指的是Redis默認是每隔100ms就隨機抽取一些設置了過期時間的key,檢查其是否過期,如果過期就刪除。

為什么是隨機抽取?
假設Redis里放了10萬個key,都設置了過期時間,你每隔幾百毫秒,就檢查10萬個key,那redis基本上就死了,因為這樣cpu負載會很高的,全都消耗在你的檢查過期key上了。

所以這里可不是每隔100ms就遍歷所有的設置過期時間的key,Redis如果設置成檢查所有Key那將是一場性能上的災難。所以實際上redis是每隔100ms隨機抽取一些key來檢查和刪除的。

但是問題是,隨機抽取檢測key是否過去會導致定期刪除策略可能會導致很多過期key到了時間并沒有被刪除掉,那咋整呢?所以Redis還有另一個策略就是惰性刪除

惰性刪除?就是說,在你獲取某個key的時候,Redis會檢查一下 ,這個key如果設置了過期時間那么是否過期了?如果過期了此時就會刪除,不會給你返回任何東西。

所以并不是key到時間就被刪除掉,而是你查詢這個key的時候,Redis再懶惰的檢查一下。

通過上述兩種手段,保證過期的key一定會被干掉。

那么剛才的問題就不難理解了,就是說,你的過期key,靠定期刪除沒有被刪除掉,還停留在內存里,占用著你的內存呢,除非你的系統去查一下那個key,才會被redis給刪除掉。如果都過期了,定期刪除才刪了一點點,而你又沒有去查,沒有觸發惰性刪除,那么短時間內你的redis內存占用率還是會下不來。

但是實際上這還是有問題的,如果定期刪除漏掉了很多過期key,然后你也沒及時去查,也就沒走惰性刪除,此時會怎么樣?如果大量過期key堆積在內存里,導致redis內存塊耗盡了,咋整?

別擔心Redis還有方案:內存淘汰機制。

(2)內存淘汰策略

如果Redis的內存占用過多的時候,此時會進行內存淘汰,Redis提供如下豐富的可選策略:

1)noeviction:當內存不足以容納新寫入數據時,新寫入操作會報錯。
(這個一般沒人用吧,實在是太惡心了)

2)allkeys-lru:當內存不足以容納新寫入數據時,在所有鍵空間中,移除最近最少使用的key
(這個是最常用的)

3)allkeys-random:當內存不足以容納新寫入數據時,在所有鍵空間中,隨機移除某個key。
(這個一般沒人用吧,為啥要隨機,把我重要的key干掉了咋整,肯定是把最近最少使用的干掉)

4)volatile-lru:當內存不足以容納新寫入數據時,在設置了過期時間的鍵空間中,移除最近最少使用的key。
(這個一般不太合適)

5)volatile-random:當內存不足以容納新寫入數據時,在設置了過期時間的鍵空間中,隨機移除某個key。

6)volatile-ttl:當內存不足以容納新寫入數據時,在設置了過期時間的鍵空間中,有更早過期時間的key優先移除。

例如:Redis 里有10個key,現在內存已經滿了,設置的淘汰策略是allkeys-lru,此時Redis需要刪除掉一些key來保證你可以繼續寫入。在這10個key中,其中1個key,最近1分鐘被查詢了100次,1個key,最近10分鐘被查詢了50次,1個key,最近1個小時被查詢了1次。肯定那些最近最少使用的被干掉了。

為啥存redis的數據有時候會丟失?
很簡單,你寫的數據太多了,內存占滿了,或者觸發了什么條件,如redis使用了allkeys-lru內存淘汰策略,自動給你清理掉了一些最近很少使用的數據。

如何獲取免費架構學習資料?

準備兩個月,面試五分鐘,Java中高級崗面試為何越來越難?

準備兩個月,面試五分鐘,Java中高級崗面試為何越來越難?

準備兩個月,面試五分鐘,Java中高級崗面試為何越來越難?

準備兩個月,面試五分鐘,Java中高級崗面試為何越來越難?

準備兩個月,面試五分鐘,Java中高級崗面試為何越來越難?

由于篇幅限制小編,pdf文檔的詳解資料太全面,細節內容實在太多啦,所以只把部分知識點截圖出來粗略的介紹,每個小節點里面都有更細化的內容!有需要的程序猿(媛)可以戳這里即可免費獲取哦

識點截圖出來粗略的介紹,每個小節點里面都有更細化的內容!有需要的程序猿(媛)可以戳這里即可免費獲取哦

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/385786.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385786.shtml
英文地址,請注明出處:http://en.pswp.cn/news/385786.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

學生檔案c語言編程,學生檔案管理問題

/* 一個修改版本 */#include struct student{int num;char name[10];char sex;char address[20];};struct student stu[3] {{000, "li lin", m, "103 beijing road"},{001, "zhang fun", m, "130 shanghai road"},{002, "wang …

從思維圖到基礎再到深入,java空間查詢

螞蟻金服一面: 先自我介紹,講講自己基礎掌握情況,以及項目經歷平時會用到哪些數據結構?鏈表和數組的優缺點?解決hash沖突的方法有哪些?講講自己對HashMap的理解,以及和Weakhashmap的區別&#…

c語言中如何取消最后一個空格,新人提問:如何將輸出時每行最后一個空格刪除...

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓如何將每行最后一個空格刪除&#xff0c;使矩陣只有數字間有空格&#xff0c;沒有多余空格&#xff1f;#include#includeint main(){int i,j,k,m,n,x,h,y;int a[15][15]{0};while(scanf("%d",&i)){k1;for(n1;n<i;…

從零開始學Java編程!java集合類詳解和使用

目錄 一、冒泡排序 二、選擇排序 三、插入排序 四、快速排序 五、歸并排序 六、希爾排序 七、堆排序 八、基數排序&#xff08;桶排序&#xff09; 九、遞歸 十、鏈表 十一、棧 十二、隊列 十三、二叉樹 最后 由于篇幅有限&#xff0c;這里就不一一羅列了&#xff0c;20道常見…

go語言調用c 的頭文件 so,Golang生成共享庫(shared library)以及Golang生成C可調用的動態庫.so和靜態庫.a...

Golang類似于C的靜態語言&#xff0c;效率也接近于C&#xff0c;如果Golang也可以導出可供C調用的庫&#xff0c;那可以和很多高級語言say goodbye了&#xff0c;goodbye似乎又有點武斷&#xff0c;但至少說&#xff0c;Golang可以做很多事&#xff0c;而且效率優于很多高級語言…

從青銅到王者的路線,java不同系統間數據同步

深耕技術&#xff0c;啃下22個技術點 互聯網行業更新換代非常快&#xff0c;行業常態便是不斷學習&#xff0c;因此這些主流技術你一個都不能落下&#xff01; ①并發編程 Java并發編程是整個Java開發體系中最難以理解&#xff0c;但也是最重要的知識點之一&#xff0c;因此學習…

c語言 大雨 班上多個同學準備,2015年計算機二級考試《C語言》提高練習題(7)

1[單選題] 若有C語言表達式23*47/3&#xff0c;以下選項中敘述正確的執行順序是A.先執行3*4得12&#xff0c;再執行212得14&#xff0c;再執行7/3得2&#xff0c;最后執行142得16B.先執行3*4得12&#xff0c;再執行7/3得2.5&#xff0c;最后執行2122.5得16.5C.先執行7/3得2&…

從青銅到王者的路線,java枚舉類使用場景

一、先來解讀&#xff1a;23種設計模式要點 1.單例模式&#xff08;Singleton Pattern&#xff09; 2.工廠模式 3.抽象工廠模式&#xff08;Abstract Factory Pattern&#xff09; 4.模板方法模式&#xff08;Template Method Pattern&#xff09; 5.建造者模式&#xff08;Bu…

android tag的作用,Android中的Context的作用(2)

ContextImpl關鍵成員和函數/*** Common implementation of Context API, which provides the base* context object for Activity and other application components.*/classContextImplextendsContext {privatefinalstaticString TAG "ContextImpl";privatefinalsta…

企業級項目實戰講解!javamap排序規則

一、服務發布簡介 分布式系統架構下&#xff0c;服務發布是一件很麻煩的事情&#xff0c;特別是在構建自動發布流程和灰度測試的策略兩個核心方面。通常情況下如果不涉及數據層面的灰度流程&#xff0c;服務可以灰度上線&#xff0c;或者滾動上線&#xff0c;這兩種方式很常用…

android頁面設置背景圖片大小,android頁面設置background為圖片后,頁面滑動掉幀問題...

最近接手的一個android項目里面&#xff0c;有個viewpager3個fragment的頁面&#xff0c;就是很常見的可以左右滑動切換頁面的那種布局。接手的時候告訴我&#xff0c;這個頁面有卡頓現象&#xff0c;性能需要優化。一開始覺得是fragment里面做了太多耗時操作的原因&#xff0c…

企業級項目實戰講解!java的war包能直接改名么

Java核心架構筆記大致如下 0~1年&#xff1a; Java基礎&#xff08;基本語法、面向對象、繼承、多態、接口和抽象類、異常、內部類、集合、泛型、反射、I/O等&#xff09;Web編程&#xff08;ServletMySQL數據庫商品管理系統實戰&#xff09;SSM框架入門到精通&#xff08;Sp…

android chrome cast,有了它 任何安卓設備瞬間變身ChromeCast

ChromeCast一經問世就頗受歡迎&#xff0c;雖然35美刀的價格已經很便宜了&#xff0c;但現在你可以不花一分錢就可以擁有ChromeCast類似的功能了。前提是你有一部系統版本在2.2以上的安卓設備&#xff0c;對于很多安卓的玩家這應該不是什么問題。實現與ChromeCast類似的功能只需…

企業級項目實戰講解!java類內部定義枚舉

螞蟻一面 ??就做了?道算法題&#xff0c;要求兩?時內完成&#xff0c;給了?度為N的有重復元素的數組&#xff0c;要求輸出第10?的數。典型的TopK問題&#xff0c;快排算法搞定。算法題要注意的是合法性校驗、邊界條件以及異常的處理。另外&#xff0c;如果要寫測試?例&…

榮耀鴻蒙價格,榮耀40S秀肌肉,120Hz+雙5000萬+鴻蒙系統,售價很感人

原標題&#xff1a;榮耀40S秀肌肉&#xff0c;120Hz雙5000萬鴻蒙系統&#xff0c;售價很感人雖然現在有不少的手機廠商開始發展子品牌&#xff0c;比如vivo發展的iQOO以及OPPO發展的真我&#xff0c;都是在市場上開始冒頭。不過知名度最高的還是榮耀這個子品牌&#xff0c;自從…

作為Java開發程序員,中科創達java應屆生薪資

01 并發寶典&#xff1a;面試專題 面試專題分為四個部分&#xff0c;分別如下 Synchronized 相關問題 可重入鎖 ReentrantLock 及其他顯式鎖相關問題 Java 線程池相關問題 Java 內存模型相關問題 1.1 Synchronized 相關問題&#xff08;這里整理了八問&#xff09; 問題一…

Java面試必備的集合源碼詳解,砥礪前行!

一面&#xff08;一個小時左右&#xff09; 算法&#xff1a;寫冒泡排序&#xff0c;問如何優化&#xff0c;簡單講了快排和堆排序的原理數據庫&#xff1a;解釋左連接數據庫第一第二第三范式&#xff0c;數據庫死鎖linux&#xff1a;怎么查看內存&#xff1b;怎么查看進程&am…

android md 控件,Android基本UI控件.md

# Android基本UI控件## *TextView 文本框*### TextView常用用法| 主要方法 | 功能描述 || :----------: | :--------------------: || getText | 獲得TextView對象的文本 || setText | 設置TextView對象的文本 || setTextColor | 設置文本顯示的顏色 |Javaprivate TextView tex…

java面試核心知識點,詳解系列文章

技術能力 通常&#xff0c;「技術能力」這個部分將緊接著你的個人簡介之后&#xff0c;放在簡歷的核心版面。這樣設計是有道理的&#xff0c;因為它能夠幫助雇主更快的判斷你的技能是否與需求相吻合。 因此在制作這一部分內容時&#xff0c;你應該考慮以下兩點&#xff1a; …

html5跨平臺桌面打包,Html5到跨平臺app應用

Html5到跨平臺app應用每一項新興技術的出現和流行&#xff0c;都是為了規模化的去統一解決一系列復雜問題&#xff0c;APICloud選擇混合開發方向&#xff0c;目的是希望借助HTML5降低app開發復雜度&#xff0c;提高app開發效率。通過工程化的實踐手段&#xff0c;我們首先設計了…