漫話:Redis 的動(dòng)態(tài)字符串比 C/Java中的字符串牛逼多了
大家好,我是一個(gè)特種兵,代號 SDS
全稱 Simple Dynamic String
即簡單動(dòng)態(tài)字符串

前些天
Redis 戰(zhàn)區(qū)遭到外來物種入侵
我的表弟 C字符串 抵擋不住,敗退而歸

我要幫他報(bào)仇
但在那之前,我要先提升戰(zhàn)斗力
...
首先,我要換個(gè)能計(jì)數(shù)的智能彈夾
像這樣

哦不,放錯(cuò)圖了,是這樣

這樣能快速看到還剩下多少子彈
不像我表弟,
他每次都得把彈夾拿出來,一顆顆數(shù)才行

每次想看彈夾里的子彈數(shù)
直接看計(jì)數(shù)器 len 就好了

我們這的槍跟別的不一樣
裝彈時(shí)一不小心裝多了
就會緩沖區(qū)溢出
說人話就是炸膛

(搭檔的類型也是 C字符串)
我那可憐的表弟,
跟他搭檔排排站,
結(jié)果他搭檔一個(gè)炸膛
頭上直接腫了一個(gè)包

前車之鑒
我決定找隔壁的奸商買個(gè)頭盔

它能在我裝彈前提醒我
彈夾里還剩下多少容量
這樣就能避免我炸膛了

智能彈夾看使用量
智能頭盔看剩余量
完美~
搞定了防具
我還得想辦法提升攻擊力
經(jīng)過一陣砍價(jià)殺價(jià)
我又從隔壁奸商那搞來了一個(gè)萬能槍口

它能讓我發(fā)射各種各樣的子彈
這也是從小表弟那吸取的經(jīng)驗(yàn)
他上次打了一發(fā)這種子彈后:

(C字符串遇到'\0'則結(jié)束)
剩下的子彈就打不出來了
我可不能再搞出這種幺蛾子
在上戰(zhàn)場前,
我找到了我的教官做最后的道別
不料他又傳授我兩個(gè)秘技

第一個(gè)是“空間預(yù)分配”

(更換彈夾,在這里主要是變更彈夾容量,而非補(bǔ)充子彈)
也就是說
只剩一顆子彈時(shí)
要換成有子彈容量為 2 的彈夾
這樣,其他彈夾才可以留給需要的伙伴

換句話說
手中的加特林有 2MB 子彈了
換彈夾時(shí)不用預(yù)留太多子彈空間
2MB + 1MB 即可
第二個(gè)是“惰性空間釋放”

這樣可以節(jié)省更換彈夾的時(shí)間。
呼,終于全副武裝
表弟,等我
哥哥一定幫你報(bào)仇…
