Redis整數集合爲什麼不支持降級?

在討論redis的整數集合的時候,我們一直知道的是整數集合支持升級,但是不支持降級,其中的原因有仔細想過嗎?
先說一下升級:當我們要將一個新元素添加到整數集合裏面,並且新元素的類型比整數集合現有所有元素的類型都要長時,整數集合需要先進行升級,然後才能將新元素添加到整數集合裏面。
再來談談爲什麼不支持降級?假設支持降級,這裏要問兩個問題:

  1. 什麼時候降級?
  2. 降級到何種級別的數據類型?

什麼時候降級?

可能我們會說當刪除最後一個最大類型比如int64的元素時降級,那麼爲了確定集合裏面沒有int64的元素,我們需要遍歷一邊集合,複雜度O(n),因爲當我們刪除一個集合當前最大類型的元素時,我們無法確定集合是否還有真的是需要最大類型存儲的數據,如果要確定的話,得進行元素的遍歷。
而且就算我們通過遍歷確認可以降級了就真的可以降級嗎?如果降級之後插入一個大類型的元素又會升級,如果頻繁的插入刪除這個大類型元素,那麼會頻繁的升降級,這個性能開銷會比較大,這裏我聯想到了java8中HashMap當單個bucket中的元素個數大於等於8時會轉換成紅黑樹,但是當節點減少到6而不是7時再轉回鏈表,就是爲了避免頻繁來回轉化

降級到何種級別的數據類型?

在升級的時候我們知道會將所有的元素升級到新加入的大類型的元素的類型,那麼降級的時候如何確定降級到何種合適大小的類型呢?這還是得全部遍歷才能確定。

綜上,整數集合不支持降級

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章