中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

網(wǎng)站營銷外包如何做網(wǎng)推技巧

網(wǎng)站營銷外包如何做,網(wǎng)推技巧,做cpa必須要有網(wǎng)站嗎,淘寶app網(wǎng)站建設(shè)Redis系列之底層數(shù)據(jù)結(jié)構(gòu)SDS 實(shí)驗(yàn)的環(huán)境 Redis 6.0VSCode 1.88.1 什么是SDS? SDS:Simple Dynamic String,翻譯為簡單動(dòng)態(tài)字符串。SDS是一種用于存儲二進(jìn)制數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),具有動(dòng)態(tài)擴(kuò)容的特點(diǎn),代碼位于src/sds.h和src/sds.c …

Redis系列之底層數(shù)據(jù)結(jié)構(gòu)SDS

實(shí)驗(yàn)的環(huán)境

  • Redis 6.0
  • VSCode 1.88.1

什么是SDS?

SDS:Simple Dynamic String,翻譯為簡單動(dòng)態(tài)字符串。SDS是一種用于存儲二進(jìn)制數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),具有動(dòng)態(tài)擴(kuò)容的特點(diǎn),代碼位于src/sds.hsrc/sds.c

SDS的總體數(shù)據(jù)結(jié)構(gòu)大致如圖:在源碼里sds包括幾個(gè)部分,len、alloc、flagsbuf,其中 sdshdr是頭部,buf是真實(shí)存儲數(shù)據(jù)的地方,在存儲的數(shù)據(jù)后面會跟一個(gè)\0,所以數(shù)據(jù)加上\0就是所謂的buf

在這里插入圖片描述

  • len:保存了SDS字符串的長度
  • buf[]:保存數(shù)據(jù)的地方
  • alloc:分別以uint8, uint16, uint32, uint64表示整個(gè)SDS
  • flags:始終為一字節(jié), 以低三位標(biāo)示著頭部的類型, 高5位未使用

查看源碼sds.h,可以看到SDS里面有幾種不同的頭部,其中sdshdr5實(shí)際并未使用到,所以實(shí)際上有四種不同的頭部

/* Note: sdshdr5 is never used, we just access the flags byte directly.* However is here to document the layout of type 5 SDS strings. */
struct __attribute__ ((__packed__)) sdshdr5 {unsigned char flags; /* 3 lsb of type, and 5 msb of string length */char buf[];
};
struct __attribute__ ((__packed__)) sdshdr8 {uint8_t len; /* used */uint8_t alloc; /* excluding the header and null terminator */unsigned char flags; /* 3 lsb of type, 5 unused bits */char buf[];
};
struct __attribute__ ((__packed__)) sdshdr16 {uint16_t len; /* used */uint16_t alloc; /* excluding the header and null terminator */unsigned char flags; /* 3 lsb of type, 5 unused bits */char buf[];
};
struct __attribute__ ((__packed__)) sdshdr32 {uint32_t len; /* used */uint32_t alloc; /* excluding the header and null terminator */unsigned char flags; /* 3 lsb of type, 5 unused bits */char buf[];
};
struct __attribute__ ((__packed__)) sdshdr64 {uint64_t len; /* used */uint64_t alloc; /* excluding the header and null terminator */unsigned char flags; /* 3 lsb of type, 5 unused bits */char buf[];
};

為什么要使用SDS?

Redis是用C語言寫的,為什么不直接就用C語言里的char來定義字符串?

  • 獲取字符串長度

由于有len屬性,所以獲取SDS字符串的長度只需要讀取len屬性,所以時(shí)間復(fù)雜度為O(1)。如果直接使用C語言中的字符串來實(shí)現(xiàn),獲取字符串的長度需要遍歷計(jì)數(shù),時(shí)間復(fù)雜度為O(n)。

  • 避免緩存區(qū)溢出

C語言中,如果使用strcat函數(shù)來進(jìn)行兩個(gè)字符串的拼接,如果沒有分配足夠長度的內(nèi)存空間,就會造成緩存區(qū)溢出。而對于SDS數(shù)據(jù)類型,在進(jìn)行字符串修改的時(shí)候,會根據(jù)記錄的len屬性檢查內(nèi)存空間是否滿足需求,如果不滿足,會進(jìn)行相應(yīng)空間的擴(kuò)展,所以不會出現(xiàn)緩存區(qū)溢出

  • 減少字符串內(nèi)存重新分配次數(shù)

C語言中字符串,是不會記錄字符串的長度的,所以一旦修改了字符串,就需要重新分配內(nèi)存,因?yàn)槿绻麤]有重新分配,字符串長度增大時(shí)會造成內(nèi)存溢出區(qū)溢出,長度減小時(shí)會造成內(nèi)存泄漏。而對于SDS來說,因?yàn)橛虚L度熟悉lenalloc屬性的存在,SDS實(shí)現(xiàn)了空間預(yù)分配惰性空間釋放兩種策略來減少重新分配內(nèi)存

  1. 空間預(yù)分配:SDS對空間進(jìn)行擴(kuò)展的時(shí)候,擴(kuò)展的內(nèi)存比實(shí)際需要的多,這樣可以減少字符串增長操作所需的內(nèi)存重新分配次數(shù)
  2. 惰性空間釋放:SDS對字符串進(jìn)行縮短操作時(shí),不會立即進(jìn)行內(nèi)存重新分配,來回收縮短后多余的內(nèi)存空間,而是使用alloc將這些字節(jié)數(shù)量記錄下來,等待后續(xù)使用
  • 二進(jìn)制安全

C語言中,是以空字符串作為字符串結(jié)束的標(biāo)識,但是一些特殊的字符串,可能就包括空字符串的,所以容易丟失數(shù)據(jù),不能正確存取。而SDS是根據(jù)len屬性,以處理二進(jìn)制的方式來處理buf里的數(shù)據(jù),所以保存數(shù)據(jù)更加安全

  • 兼容部分C字符串函數(shù)

SDS可以重用C語言庫<string.h>中的一部分函數(shù)

C字符串和SDS對比

C字符串SDS
獲取字符串長度時(shí)間復(fù)雜度為O(n)獲取字符串的長度時(shí)間復(fù)雜度為O(1)
不安全,可能會造成緩沖區(qū)溢出安全,不會造成緩沖區(qū)溢出
修改字符串n次就需要進(jìn)行n次內(nèi)存分配修改字符串長度n次,最多需要n次內(nèi)存分配
只能保存文本數(shù)據(jù)可以保存文本數(shù)據(jù)或者二進(jìn)制數(shù)據(jù)
可以使用所有<string.h>庫中的函數(shù)可以使用一部分<string.h>庫中的函數(shù)
http://www.risenshineclean.com/news/58241.html

相關(guān)文章:

  • 網(wǎng)站開發(fā)的小結(jié)騰訊營銷平臺
  • 邢臺網(wǎng)站建設(shè)免費(fèi)做網(wǎng)站排名seo關(guān)鍵詞布局案例
  • 網(wǎng)站平臺是怎么做財(cái)務(wù)的贛州網(wǎng)站seo
  • 網(wǎng)站建設(shè)屬政府采購項(xiàng)目嗎濟(jì)寧百度推廣公司
  • 肅寧縣做網(wǎng)站網(wǎng)推渠道
  • 白河網(wǎng)站制作網(wǎng)站模板之家官網(wǎng)
  • 類似豬八戒的網(wǎng)站建設(shè)網(wǎng)店運(yùn)營公司
  • 網(wǎng)站被k的怎么辦泰安網(wǎng)站seo
  • 做平面什么網(wǎng)站好用百度文庫官網(wǎng)登錄入口
  • 合肥做網(wǎng)站好的公司今天剛剛發(fā)生的新聞
  • 最大的網(wǎng)站開發(fā)公司市場營銷案例
  • wordpress登入修改seo顧問服務(wù) 樂云踐新專家
  • 良品鋪?zhàn)泳W(wǎng)站建設(shè)百度推廣優(yōu)化是什么?
  • wordpress的favicon網(wǎng)站優(yōu)化排名操作
  • 丹陽網(wǎng)站設(shè)計(jì)網(wǎng)站市場推廣
  • seo短視頻網(wǎng)頁入口引流網(wǎng)站有哪些國家職業(yè)技能培訓(xùn)官網(wǎng)
  • 中文版網(wǎng)站建設(shè)費(fèi)用百度一下百度
  • 網(wǎng)站備案教程海外推廣代理商
  • 坊網(wǎng)站建設(shè)seo推廣公司有哪些
  • 創(chuàng)辦一個(gè)網(wǎng)站要多少錢營業(yè)推廣方式
  • 快速做網(wǎng)站的軟件網(wǎng)站規(guī)劃與設(shè)計(jì)
  • 青島市城鄉(xiāng)建設(shè)局網(wǎng)站西安網(wǎng)絡(luò)推廣公司網(wǎng)絡(luò)推廣
  • 企業(yè)網(wǎng)站優(yōu)化案例論壇優(yōu)化seo
  • 網(wǎng)站 建設(shè)運(yùn)行情況報(bào)告a5站長網(wǎng)
  • 可以上傳自己做的視頻的網(wǎng)站嗎公司怎么做網(wǎng)絡(luò)營銷
  • 自己給網(wǎng)站做優(yōu)化怎么做百度seo高級優(yōu)化
  • 網(wǎng)站建設(shè)比較好西安seo霸屏
  • 影樓網(wǎng)站源碼php免費(fèi)個(gè)人網(wǎng)站注冊
  • 山東定制網(wǎng)站建設(shè)公司鄭州網(wǎng)絡(luò)營銷學(xué)校
  • 淺談全球五金網(wǎng)電子商務(wù)網(wǎng)站建設(shè)營銷寶