Redis 初探dict字典原理的實現 二

2021-06-21 10:12:15 字數 735 閱讀 5293

時間頗為倉促,以下簡單概括一下dict的基礎與核心的知識點:

1. 應用範圍: redis中字典的應用範圍非常廣泛;  資料庫的鍵空間, hash型別等都是通過字典來實現的.

2. rehash: 內部維持了兩個hashtable, ht[0]為當前所用到的儲存ht; 

如果正在rehasing, 那麼ht[0]會有部分資料遷移到ht[1]; 如果rehash完成, ht[1]將會成為ht[0], 而新的ht[1]將重新初始化;

rehash是自動進行的, 如果填充率過高(即節點數量比可用bucket多得多時)而超過預設值時,將會進行reash;

rehash過程是分步而不是一次來完成的,可以有效減少阻塞時長.

3. resize:   體積縮小的規則與rehash是類似的,最大不同之處是resize是需要程式手動調起的, 而rehash可以自動進行.

4. 安全迭代器與非安全迭代器: 非安全迭代器只能進行get等讀的操作, 而安全迭代器則可以進行iterator支援的任何操作.                  

由於dict結構中儲存了safe iterators的數量,如果數量不為0, 是不能進行下一步的rehash的; 因此安全迭代器的存在保證了遍歷資料的準確性;

在非安全迭代器的迭代過程中, 會通過fingerprint方法來校驗iterator在初始化與釋放時字典的hash值是否一致; 如果不一致說明迭代過程中發生了非法操作.

5. 字典中的hash表通過鏈位址法來解決鍵的衝突問題.

dict字典 dict的操作

1.字典 dict 用 來表示 鍵值對資料 唯一性 鍵 都必須是可雜湊的 不可變的資料型別就可以當做字典中的鍵 值 沒有任何限制 1.1 字典的建立 1 dic 2 fromkeys fromkeys 函式用於建立乙個新字典,以序列 seq 中的每個元素做字典的鍵,value 為字典所有鍵對應的初始...

Dict字典操作

字典遍歷 dict for key,value in dict.items print key key,value value for key in dict.keys print key key for value in dict.values print value value 字典賦值 dic...

dict取值 字典(dict)常用操作

字典型別 1 有序 or 無序 無序 2 可變 or 不可變 可變型別 字典常用操作 1 取值 用key取值 print my dict name print my dict hobbies 0 賦值,若字典中沒有對應的key,則是新增 否則做修改 my dict male my dict age ...