redis學習-sds資料類型

來源:互聯網
上載者:User

標籤:style   http   ar   使用   sp   資料   on   問題   html   

今天開始了redis的學習,本來想直接從源碼看起的,不過看到有篇對redis介紹的基礎教程 《Redis 設計與實現(第一版)》

於是決定從這個開始入門。

 

1.資料類型定義

 

typedef char *sds;struct sdshdr {    // buf 已佔用長度    int len;    // buf 剩餘可用長度    int free;    // 實際儲存字串資料的地方    char buf[];};

2.重新計算新的長度
newlen = sdshdr.len + required_len

if newlen < SDS_MAX_PREALLOC:        newlen *= 2    else:        newlen += SDS_MAX_PREALLOC

3. 關於這種分配策略會浪費記憶體嗎?
執行 APPEND 命令的字串鍵數量通常並不多, 佔用記憶體的體積通常也不大, 所以這一般並不算什麼問題
如果執行 APPEND 操作的鍵很多, 而字串的體積又很大的話, 那可能就需要修改 Redis 伺服器, 讓它定時釋放一些字串鍵的預分配空間, 從而更有效地使用記憶體。


小結
  • Redis 的字串表示為 sds ,而不是 C 字串(以 \0 結尾的 char*)。
  • 對比 C 字串, sds 有以下特性:
    • 可以高效地執行長度計算(strlen);
    • 可以高效地執行追加操作(append);
    • 二進位安全;
  • sds 會為追加操作進行最佳化:加快追加操作的速度,並降低記憶體配置的次數,代價是多佔用了一些記憶體,而且這些記憶體不會被主動釋放。


 

redis學習-sds資料類型

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.