sds (****** dynamic string)
比起 c 字串, sds 具有以下優點:
len屬性維護字串長度,常數複雜度即可獲取。
預先檢查長度是否滿足需求,如果不滿足自動拓展,杜絕緩衝區溢位。
空間預分配、惰性空間釋放會減少修改字串長度時所需的記憶體重分配次數。
二進位制安全。
相容部分 c 字串函式。
list
鍊錶被廣泛用於實現 redis 的各種功能, 比如列表鍵, 發布與訂閱, 慢查詢, 監視器, 等等。
每個鍊錶節點由乙個 listnode 結構來表示, 每個節點都有乙個指向前置節點和後置節點的指標, 所以 redis 的鍊錶實現是雙端鍊錶。
每個鍊錶使用乙個 list 結構來表示, 這個結構帶有表頭節點指標、表尾節點指標、以及鍊錶長度等資訊。
因為煉表表頭節點的前置節點和表尾節點的後置節點都指向 null , 所以 redis 的鍊錶實現是無環鏈表。
通過為鍊錶設定不同的型別特定函式, redis 的鍊錶可以用於儲存各種不同型別的值。
map字典被廣泛用於實現 redis 的各種功能, 其中包括資料庫和雜湊鍵。
redis 中的字典使用雜湊表作為底層實現, 每個字典帶有兩個雜湊表, 乙個用於平時使用, 另乙個僅在進行 rehash 時使用。
當字典被用作資料庫的底層實現, 或者雜湊鍵的底層實現時, redis 使用 murmurhash2 演算法來計算鍵的雜湊值。
雜湊表使用鏈位址法來解決鍵衝突, 被分配到同乙個索引上的多個鍵值對會連線成乙個單向鍊錶。
在對雜湊表進行擴充套件或者收縮操作時, 程式需要將現有雜湊表包含的所有鍵值對 rehash 到新雜湊表裡面, 並且這個 rehash 過程並不是一次性地完成的, 而是漸進式地完成的。
redis設計與實現 讀書筆記1
乙個業務模型引出對redis的好奇 提出問題 1.redis 的五種資料型別分別由什麼資料結構實現?2.redis 的字串型別既可以儲存字串,也可以儲存整數和浮點數,甚至是二進位制位 使用setbit redis 內部是如何實現儲存這些值?3.redis的一部分命令只能對特定的資料型別執行 而另一部...
《redis設計與實現》讀書筆記(一)
定時刪除 惰性刪除 定期刪除 描述一過期立馬刪除 下次獲取時再刪除 每隔一段時間批量刪除 優點對記憶體友好 對cpu時間友好 缺點 對cpu時間不友好 對記憶體不友好 aof持久化是通過儲存redis伺服器所執行的寫命令來記錄資料庫狀態。aof持久化的實現 命令追加 寫命令以協議的格式追加到aof ...
redis設計和實現》讀書筆記
redis如何實現主從同步的高效率?主從複製的同步有乙個命令資料的同步文字,然後利用兩個不同伺服器的偏移量來進行進行同步,避免每次都是全部同步 並非會儲存所有的命令資料,而是會有乙個緩衝區 比如1m,比如2m 如果偏移量在這個緩衝區裡面則是會部分同步 redis的備份包括儲存資料的二進位制和命令的同...