引言
Redis是一款基于键值对的数据结构存储系统,它的特点是基于内存操作、单线程处理命令、IO多路复用模型处理网络请求、键值对存储与简单丰富的数据结构等等
这篇文章主要围绕Redis中的对象与数据结构来详细说明键值对存储与简单丰富的数据结构这两大特点
Redis中的数据以Key,Value键值对的形式存储在字典中,字典的实现是哈希表
键Key只能使用字符串对象来表示,值Value能够使用其他所有对象
对象与数据结构
Redis中存在丰富的对象,常用的对象(数据类型)有字符串对象string、列表对象list、散列对象hash、集合对象set、有序集合对象zset等
还有其他的数据类型如Bitmap、Hyperloglog、Geospatial、布隆过滤器等,但这篇文章只涉及常用的对象,其他数据类型再以后的文章中再展开说明
redis中的对象RedisObject由类型、编码、引用次数、lru、指向编码使用的数据结构对象构成
类型标识这个对象是什么类型对象
比如字符串、列表、哈希、集合、有序集合等
编码表示构成对应类型对象时使用哪种数据结构
引用次数表示这个对象被引用了多少次
redis内存回收使用引用计数法,回收引用次数为0的对象 redis只依赖字符串对象,而不存在循环依赖所以不存在循环引用,因此可以使用引用计数法
lru记录这个对象最近被调用的时间,当空间回收算法使用lru时会优先回收很久未用的对象(后续删除回收的文章会介绍)
数据结构
sds简单动态字符串
sds使用字节数组维护,len记录字符串长度(表示结尾的'