在redis中一个数据库结构体是这样的
每个dict是一个hash表
typedef struct redisDb {
dict *dict; /* The keyspace for this DB */
dict *expires; /* Timeout of keys with a timeout set */
dict *blocking_keys; /* Keys with clients waiting for data (BLPOP) */
dict *io_keys; /* Keys with clients waiting for VM I/O */
dict *watched_keys; /* WATCHED keys for MULTI/EXEC CAS */
int id;
} redisDb;
// dict字段中存放以KEY值为键,以VALUE指针为值的HASH表项
dict根据类型的不同分为如下几种:
1、字符串(String) 操作 set "key" "value"; get "key"
键是key的字符串对象,value是value的字符串对象
2、哈希(Hashes)操作 hset key field value
当field的数量少于一定数量时 键是key的字符串对象,值是ZipMap的buffer buffer中内容形如 field1:value1 field2:value2
当field的数量多于一定量时,值升级为一个DICT对象指针,DICT中存放field和value的键值对
3、列表(Lists)操作 LPUSH key value
键为key的字符串对象,值为Ziplist对象,value
4、集合(Sets)操作 sadd setname member
键为key的字符串对象,值为dict对象
dict的键为member,值为NULL指针
键为key的字符串对象,值为ZIPlist对象
参考博文