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