執(zhí)行上面的操作
String是Redis最基本的類型,一個(gè)key對(duì)應(yīng)一個(gè)value。
String類型是二進(jìn)制安全的。意味著Redis的string可以包含任何數(shù)據(jù)。比如jpg圖片或者序列化的對(duì)象。
String類型是Redis最基本的數(shù)據(jù)類型,一個(gè)Redis中字符串value最多可以是512M
2.1常用命令set 添加鍵值對(duì)
關(guān)于set的其他參數(shù)
get 查詢對(duì)應(yīng)鍵值
append 將給定的 追加到原值的末尾
strlen 獲得值的長度
setnx 只有在 key 不存在時(shí) 設(shè)置 key 的值
數(shù)字類型的命令:
incr
decr
incrby / decrby<步長>將 key 中儲(chǔ)存的數(shù)字值增減。自定義步長。
mset …
mget …
msetnx …
getrange<起始位置><結(jié)束位置>
setrange<起始位置>
setex<過期時(shí)間>
getset
Redis是用C語言寫的,但是對(duì)應(yīng)Redis的Sting,并不是C 語言中的字符串(即以空字符’\0’結(jié)尾的字符數(shù)組);Redis自定義了數(shù)據(jù)結(jié)構(gòu)SDS(simple dynamic string)【簡(jiǎn)單動(dòng)態(tài)字符串】,并將 SDS 作為 Redis的默認(rèn)字符串表示。
struct sdshdr{//記錄 buf 數(shù)組中未使用字節(jié)的數(shù)量
int free;
//記錄buf數(shù)組已使用字節(jié)的數(shù)量
//等于 SDS 保存字符串的長度
int len;
//字節(jié)數(shù)組,用于保存字符串
char buf[]; //柔性數(shù)組
}
優(yōu)點(diǎn):
減少修改字符串的內(nèi)存重新分配次數(shù)
C語言字符串由于不記錄字符串長度,所以如果要修改字符串,必須重新分配內(nèi)存(先釋放再申請(qǐng))。因?yàn)槿绻麤]有重新分配,字符串長度增大時(shí)會(huì)造成內(nèi)存緩沖區(qū)溢出,字符串長度減小時(shí)會(huì)造成內(nèi)存泄露。
對(duì)于SDS,由于len屬性和free屬性的存在,對(duì)于修改字符串SDS實(shí)現(xiàn)了空間預(yù)分配和惰性空間釋放兩種策略:
二進(jìn)制安全
C++中數(shù)組在進(jìn)行擴(kuò)容時(shí),往往會(huì)申請(qǐng)一個(gè)更大的數(shù)組,然后把數(shù)組拷貝過去。Redis同樣基于這種策略提高了空間預(yù)分配機(jī)制。
當(dāng)執(zhí)行字符串增長操作并且需要擴(kuò)展內(nèi)存時(shí),程序不僅僅會(huì)給SDS分配必需的空間還會(huì)分配額外的未使用空間,其長度存到free屬性中。具體如下:
惰性空間釋放用于字符串縮短的操作。當(dāng)字符串縮短是,程序并不是立即使用內(nèi)存重分配來回收縮短出來的字節(jié),而是使用free屬性記錄起來,并等待將來使用。
Redis字符串使用int類型表示長度,一共有32個(gè)比特位。2^32字節(jié)=512M
4.SDS面試題1.SDS如何兼容C語言字符串?如何保證二進(jìn)制安全?
C99中提到,結(jié)構(gòu)體的最后一個(gè)成員如果是一個(gè)數(shù)組,大小不確定,那么就是一個(gè)柔性數(shù)組。
SDS對(duì)象中的buf是一個(gè)柔性數(shù)組,上層調(diào)用時(shí),SDS直接返回了buf。由于buf是直接指向內(nèi)容的指針,所以兼容C語言函數(shù)。而當(dāng)真正讀取內(nèi)容時(shí),SDS會(huì)通過len來限制讀取長度,而非“\0”,所以保證了二進(jìn)制安全。
2.SDS是如何擴(kuò)容的?
空間預(yù)分配。先判斷擴(kuò)容長度與free的大小關(guān)系,如果夠就直接拼接字符串,如果不夠使用空間預(yù)分配的方式擴(kuò)容。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
當(dāng)前名稱:【Redis】數(shù)據(jù)結(jié)構(gòu)---String-創(chuàng)新互聯(lián)
標(biāo)題鏈接:http://aaarwkj.com/article26/piocg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、軟件開發(fā)、網(wǎng)站收錄、品牌網(wǎng)站制作、手機(jī)網(wǎng)站建設(shè)、全網(wǎng)營銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容