我正在面試間里焦急地等待著,突然聽到了門外的腳步聲,隨即門被打開,穿著干凈滿臉清秀的青年走了進來,一股男士香水的淡香撲面而來,
面試官:“平時在作業中用過Redis嗎?”
我:“用的比較多,”我心中暗喜,Redis我熟啊,什么五種資料型別、兩種持久化方式倒背如流啊,
面試官:“Redis的共享物件池了解嗎?”
“這個,,沒有太深入了解,”我支支吾吾的說到,手心已經冒出冷汗,
面試官:“回去等訊息吧,”
這句話說的干凈利落,然后就沒有然后了,失敗是成功的媽媽,我不氣餒,決定馬上惡補一下,
共享物件池
創建大量重復的整數型別勢必會耗費大量記憶體,所以在Redis內部維護了一個從0到9999的整數物件池,這就是共享物件池,
為了驗證和理解,我們使用object refcount命令查看一下物件參考數,效果如下:
127.0.0.1:6379> set one-more-num1 404
OK
127.0.0.1:6379> object refcount one-more-num1
(integer) 2
172.24.130.22:6379> set one-more-num2 404
OK
127.0.0.1:6379> object refcount one-more-num2
(integer) 3
設定one-more-num1為404后,直接使用共享池中的整數物件,所以參考數為2(另外一個參考在物件池上);再設定one-more-num2為404后,參考數變成了3,
不過需要注意的是:當設定最大記憶體值(maxmemory)并且啟用LRU相關淘汰策略(如:volatile-lru、allkeys-lru)時,共享物件池將會被禁止使用,
為什么沒有字串物件池?
共享物件池中一個關鍵操作是判斷物件是否相等,
Redis中只有整數型別的物件池,是因為整數的比較演算法的時間復雜度是O(1),也只保留了10000個整數為了防止物件池的過度浪費,
相對而言,字串的比較演算法的時間復雜度是O(n),特別是長字串的比較更加消耗性能,
而且,整數型別被重復使用的概率很大,字串被重復使用的概率相比就會小很多很多,所以在Redis中只用整數型別的物件共享池,
面試官你等著瞧吧,今天你對我愛答不理,明天我讓你高攀不起,哈哈哈,,,
參考文獻:
《Redis設計與實作》
《Redis開發與運維》
《Redis 深度歷險:核心原理與應用實踐》
竟然已經看到這里了,你我定是有緣人,留下你的點贊和關注,他日必成大器,
微信公眾號:萬貓學社
微信掃描二維碼
關注后回復「電子書」
獲取12本Java必讀技術書籍
作者:萬貓學社
出處:http://www.cnblogs.com/heihaozi/
著作權宣告:本文遵循 CC 4.0 BY-NC-SA 著作權協議,轉載請附上原文出處鏈接和本宣告,
微信掃描二維碼,關注萬貓學社,回復「電子書」,免費獲取12本Java必讀技術書籍,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/440461.html
標籤:其他
