Redis介绍
1.非关系型的键值对数据库,可以根据键以O(1)的时间复杂度取出或插入关联值
2. Redis的数据是存在内存中的
3.键值对中键的类型可以是字符串,整型,浮点型等,且键是唯一的
4.键位对中的位类型可以是string,hash,list, set,sorted set等
5. Redis内置了复制,磁盘持久化,LUA脚本,事务,SSL,ACLs,客户端代理等功能
6.通过Redis哨兵和自动分区提供高可用性
Redis底层使用C语言实现,key使用SDS类型(len存储数据长度,free表示剩余空间,char数组存字符串。例原来字符串"abc",新字符串"abcdef",空间不够,扩容大小位len+需要扩容大小后乘2,最大1M)。
3.2之前len和free是int类型,可以存储32亿,通常用不到,浪费空间,3.2之后对SDS类型做了扩展sdshdr5/sdshdr8/sdshdr16等,用flags表示具体类型(flags前三位存放string的类型,后五位存放字符串长度,可存放2的五次幂-1,超过就使用sdshdr8)。
RedisDB
默认情况下redis有16个DB
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等)。
一个缓存行64字节,redisObject本身占16byte,存储string类型占4byte,剩余44,数据小于44就不会再去开辟内存空间,object encoding就是embstr,超过45就是raw;