redis存储

redis介绍

redis存储
redis底层使用C语言实现,key使用SDS类型(len存储数据长度,free表示剩余空间,char数组存字符串。例原来字符串"abc",新字符串"abcdef",空间不够,扩容大小位len+需要扩容大小后乘2,如果超过1M,每次扩容1M)。
3.2之前len和free是int类型,可以存储32亿,通常用不到,浪费空间,3.2之后对SDS类型做了扩展sdshdr5/sdshdr8/sdshdr16等,用flags表示具体类型(flags前三位存放string的类型,后五位存放字符串长度,可存放2的五次幂-1,超过就使用sdshdr8)。
redis存储
redis存储

redisDB
默认情况下redis有16个DB
redis存储
key/value在redis中,是存储在dict结构中,dict结构中存储两个dictht(hash表),dictht中存储dictEntry,dictEntry中存储的就是Key/Value具体数据,key以SDS格式存储,value以redisObject格式存储,redisObject存储了数据的类型type(string,hash,list,set,zset)和编码encoding(embstr,raw,int等)。
redis存储

一个缓存行64字节,Redisobject本身占16byte,存储string类型占4byte,剩余44,数据小于44就不会再去开辟内存空间,object encoding就是embstr,超过45就是raw;