写在前头
redis真是个好东西,现在的大型系统,已经是NoSQL以及SQL的组合了。今天是3.10号。算是开启自己线上博客生涯吧。(以前比较喜欢记在本子上Orz)。感觉这段时间,在找工作,但也有很多时间能够充实自己,读点书,也还不错。
简单动态字符串
SDS,simple dynamic string,为Redis的默认字符串表示。
SDS与C中字符串的区别
C语言使用长度为N+1的字符数组来表示长度为N的字符串,并且字符数组的最后一个元素总是空字符串“\0”
SDS可以常数复杂度获取字符串长度:len属性
杜绝缓冲区溢出:SDS API在操作的时候会对SDS空间进行合理重新分配大小。
未使用空间属性:free
空间预分配与惰性空间释放
空间预分配:
以1MB为基准。修改SDS后,SDS长度小于1MB,SDS将会分配同len长度一样的预空间free
即修改前:3bytes 修改为5byte 即为 4 + 4 + 1 = 9bytes
大于1MB,直接分配一个1MB的多余空间。
只有在剩余空间不够新分配时,SDS才会重新释放。
惰性空间释放:
剩余空间会放在free中进行保留,如果有需要,SDS有真正的API可以对剩余空间进行释放。
Redis链表
Redis链表是双端无环的。内置的list类型也是由链表来实现的。