漫话:Redis 的动态字符串比 C/Java中的字符串牛逼多了
共 844字,需浏览 2分钟
·
2021-05-15 09:26
大家好,我是一个特种兵,代号 SDS
全称 Simple Dynamic String
即简单动态字符串
前些天
Redis 战区遭到外来物种入侵
我的表弟 C字符串 抵挡不住,败退而归
我要帮他报仇
但在那之前,我要先提升战斗力
...
首先,我要换个能计数的智能弹夹
像这样
哦不,放错图了,是这样
这样能快速看到还剩下多少子弹
不像我表弟,
他每次都得把弹夹拿出来,一颗颗数才行
每次想看弹夹里的子弹数
直接看计数器 len 就好了
我们这的枪跟别的不一样
装弹时一不小心装多了
就会缓冲区溢出
说人话就是炸膛
(搭档的类型也是 C字符串)
我那可怜的表弟,
跟他搭档排排站,
结果他搭档一个炸膛
头上直接肿了一个包
前车之鉴
我决定找隔壁的奸商买个头盔
它能在我装弹前提醒我
弹夹里还剩下多少容量
这样就能避免我炸膛了
智能弹夹看使用量
智能头盔看剩余量
完美~
搞定了防具
我还得想办法提升攻击力
经过一阵砍价杀价
我又从隔壁奸商那搞来了一个万能枪口
它能让我发射各种各样的子弹
这也是从小表弟那吸取的经验
他上次打了一发这种子弹后:
(C字符串遇到'\0'则结束)
剩下的子弹就打不出来了
我可不能再搞出这种幺蛾子
在上战场前,
我找到了我的教官做最后的道别
不料他又传授我两个秘技
第一个是“空间预分配”
(更换弹夹,在这里主要是变更弹夹容量,而非补充子弹)
也就是说
只剩一颗子弹时
要换成有子弹容量为 2 的弹夹
这样,其他弹夹才可以留给需要的伙伴
换句话说
手中的加特林有 2MB 子弹了
换弹夹时不用预留太多子弹空间
2MB + 1MB 即可
第二个是“惰性空间释放”
这样可以节省更换弹夹的时间。
呼,终于全副武装
表弟,等我
哥哥一定帮你报仇…