欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

【Redis】數(shù)據(jù)結(jié)構(gòu)---String-創(chuàng)新互聯(lián)

文章目錄
    • String(字符串)
      • 1.Redis 鍵(key)
      • 2.String(字符串)
        • 2.1常用命令
        • 2.2.String底層結(jié)構(gòu)
      • 3.空間分配策略
        • 3.1空間預(yù)分配
        • 3.2惰性空間釋放
        • 3.3為什么SDS的大長度是512M?
      • 4.SDS面試題

成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比商洛網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式商洛網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋商洛地區(qū)。費(fèi)用合理售后完善,10余年實(shí)體公司更值得信賴。String(字符串) 1.Redis 鍵(key)
  • keys *查看當(dāng)前庫所有key (匹配:keys *1)
  • exists key判斷某個(gè)key是否存在
  • type key 查看你的key是什么類型
  • del key 刪除指定的key數(shù)據(jù)
  • unlink key 根據(jù)value選擇非阻塞刪除。僅將keys從keyspace元數(shù)據(jù)中刪除,真正的刪除會(huì)在后續(xù)異步操作。
  • expire key 10 10秒鐘:為給定的key設(shè)置過期時(shí)間
  • ttl key 查看還有多少秒過期,-1表示永不過期,-2表示已過期

image-20221130014337304

執(zhí)行上面的操作

image-20221130015234931

2.String(字符串)

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ì)

image-20221130021209021

關(guān)于set的其他參數(shù)

  • NX:當(dāng)數(shù)據(jù)庫中key不存在時(shí),可以將key-value添加數(shù)據(jù)庫
  • *XX:當(dāng)數(shù)據(jù)庫中key存在時(shí),可以將key-value添加數(shù)據(jù)庫,與NX參數(shù)互斥
  • EX:key的超時(shí)秒數(shù)
  • PX:key的超時(shí)毫秒數(shù),與EX互斥

get 查詢對(duì)應(yīng)鍵值

append 將給定的 追加到原值的末尾

strlen 獲得值的長度

setnx 只有在 key 不存在時(shí) 設(shè)置 key 的值

image-20221130022154240

數(shù)字類型的命令:

incr

  • 將 key 中儲(chǔ)存的數(shù)字值增1
  • 只能對(duì)數(shù)字值操作,如果為空,新增值為1

decr

  • 將 key 中儲(chǔ)存的數(shù)字值減1
  • 只能對(duì)數(shù)字值操作,如果為空,新增值為-1

incrby / decrby<步長>將 key 中儲(chǔ)存的數(shù)字值增減。自定義步長。

  • 注意:INCR類型的命令是原子的,Redis單命令的原子性主要得益于Redis的單線程。

image-20221130022352456

mset …

  • 同時(shí)設(shè)置一個(gè)或多個(gè) key-value對(duì)

mget …

  • 同時(shí)獲取一個(gè)或多個(gè) value

image-20221130022635543

msetnx …

  • 同時(shí)設(shè)置一個(gè)或多個(gè) key-value 對(duì),當(dāng)且僅當(dāng)所有給定 key 都不存在。
  • 該命令具有原子性:其中有一個(gè)key是存在的,則都創(chuàng)建失敗

image-20221130022855031

getrange<起始位置><結(jié)束位置>

  • 獲得值的范圍,類似C++中string類的substr。

setrange<起始位置>

  • 用 覆寫所儲(chǔ)存的字符串值,從<起始位置>開始(索引從0****開始)。

image-20221130023035175

setex<過期時(shí)間>

  • 設(shè)置鍵值的同時(shí),設(shè)置過期時(shí)間,單位秒。

getset

  • 以新?lián)Q舊,設(shè)置了新值同時(shí)獲得舊值。
2.2.String底層結(jié)構(gòu)

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ù)組
}

image-20221130024613783

  • len為字符串的實(shí)際長度,保證了獲取字符串長度時(shí)為O(1)操作
  • free為buf數(shù)組中剩余的空間大小
  • buf 保存字符串的數(shù)組
  • 如果長度不夠,會(huì)主動(dòng)申請(qǐng)空間
  • redis實(shí)際開辟的空間為len+free

優(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ù)分配和惰性空間釋放兩種策略:

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

二進(jìn)制安全

  • C字符串以空字符作為字符串結(jié)束的標(biāo)識(shí),而對(duì)于一些二進(jìn)制文件(如圖片等),內(nèi)容可能包括空字符串,因此C字符串無法正確存?。?/li>
  • 而所有 SDS 的API 都是以處理二進(jìn)制的方式來處理 buf 里面的元素,**并且 SDS 不是以空字符串來判斷是否結(jié)束,而是以 len 屬性表示的長度來判斷字符串是否結(jié)束。**所以SDS可以保存圖片、音頻等文件內(nèi)容。
3.空間分配策略 3.1空間預(yù)分配

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屬性中。具體如下:

  • **如果修改后len長度將小于1M,這時(shí)分配給free的大小和len一樣;**例如修改過后為10字節(jié), 那么給free也是10字節(jié),buf實(shí)際長度變成了10+10+1 = 21byte(別忘記了\0的存在)
  • **如果修改后len的長度大于等于1M,這時(shí)分配給free的長度為1M;**例如修改過后為30M,那么給free是1M.buf實(shí)際長度變成了30M+1M+1byte

image-20221130031707362

3.2惰性空間釋放

惰性空間釋放用于字符串縮短的操作。當(dāng)字符串縮短是,程序并不是立即使用內(nèi)存重分配來回收縮短出來的字節(jié),而是使用free屬性記錄起來,并等待將來使用。

image-20221130031932892

3.3為什么SDS的大長度是512M?

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)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司
精品人妻一区二区四区| 久久精品91久久久| 中文字幕你懂的在线观看| 妇女自拍偷自拍亚洲精品| 极品女神福利视频久久| 国产传媒在线视频免费| 久久香蕉精品国产亚洲av| 91免费观看视频高清| 哪里可以看日韩免费毛片| 看看永久成人免费视频| 国产91日韩欧美在线观看| 日本新任女教师在线播放| 中文字幕人妻丝袜一区一三区| 人妻少妇偷人精品免费看| 国产亚洲欧美精品久久久久| 麻豆蜜桃精品视频在线观看| 免费高清视频一区二区在线观看| 亚洲av成人精品网站推荐| 四虎永久精品国产毛片| 日本一区二区高清在线观看| 亚洲综合av伊人久久| 亚洲av色网在线观看| 黄片在线免费观看欧美中文| 亚洲欧美激情啪啪啪| 在线成人影院中文字幕| 国产麻豆剧传媒国产av| 九九热在线视频观看最新| 精品国产综合一区二区三区| 亚洲av偷拍一区二区三区不卡| 国产三级全黄在线播放| 亚洲一区欧美日韩91| 在线免费观看日韩黄片| 国产精品九九久久精品女同| 91桃色网站在线免费观看| 亚洲国产精品成人久久66| 日本毛茸茸的丰满熟妇| 涩涩涩丁香色婷五月网| 欧美日韩精品一区二区在线播放 | 未满十八周岁禁看视频| 一本久道久久综合狠狠老| av丰满人妻一区二区|