Redis的數據結構(一)
阿新 • • 發佈:2018-03-05
惰性 api rim 緩沖 可能 過程 edi strong body
(一)使用SDS(simple dynamic string)簡單動態字符串。
好處:
1.可以杜絕緩沖區溢出。--->SDS API在修改SDS時會進行空間判斷,【空間不足會自動擴充-->再執行修改操作】
2.C的 內存重分配 過程--->每次都要重分配--->耗時,影響性能。
①執行增長字符串操作--->like appened拼接操作,在執行該操作之前--->先通過內存重分配-->拓展底層數組空間大小。
②執行縮短字符串操作--->like trim,那麽在執行這個操作之後,內存重分配--->釋放部分空間。
3.SDS 的空間預分配 和惰性空間釋放【SDS優化策略】
①:空間預分配:--->用於優化SDS字符串增長操作。【①SDS.len<1MB--->size*2+1[size大小的未使用空間+這個1用於保存空字符]
②SDS.len>1MB--->30MB(len的大小由1變為30)+1MB(未使用空間)+1byte(保留空字符)】
②:惰性空間釋放--->優化SDS字符串縮短操作。避免了縮短字符時所需要的內存重新分配 操作。並為將來可能的增長操作提供了優化。
(二)Redis字典的實現
1.哈希表
①擴展和收縮是根據 負載因子來判斷的。【其中拓展有個--寫時復制---優化子進程的使用效率】
Redis的數據結構(一)