52037317 发表于 2018-11-7 10:27:55

redis相关知识(二)

1 Redis 内存存储结构  本文是基于 Redis-v2.2.4 版本进行分析.
1.1 Redis 内存存储总体结构  Redis 是支持多key-value数据库(表)的,并用 RedisDb 来表示一个key-value数据库(表). redisServer 中有一个 redisDb *db; 成员变量, RedisServer 在初始化时,会根据配置文件的 db 数量来创建一个 redisDb 数组. 客户端在连接后,通过 SELECT 指令来选择一个 reidsDb,如果不指定,则缺省是redisDb数组的第1个(即下标是 0 ) redisDb. 一个客户端在选择 redisDb 后,其后续操作都是在此 redisDb 上进行的. 下面会详细介绍一下 redisDb 的内存结构.
http://www.searchtb.com/wp-content/uploads/2011/04/Image011710.jpg
  redis 的内存存储结构示意图
  redisDb 的定义:
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>} redisDb;redisDb 中 ,dict 成员是与实际存储数据相关的. dict 的定义如下:typedef struct dictEntry{void *key;void *val;struct dictEntry *next;} dictEntry;typedef struct dictType{unsigned int (*hashFunction)(const void *key);void *(*keyDup)(void *privdata, const void *key);void *(*valDup)(void *privdata, const void *obj);int (*keyCompare)(void *privdata, const void *key1, const void *key2);void (*keyDestructor)(void *privdata, void *key);void (*valDestructor)(void *privdata, void *obj);} dictType;/* This is our hash table structure. Every dictionary has two of this as we* implement incremental rehashing, for the old to the new table. */typedef struct dictht{dictEntry **table;unsigned long>unsigned long>unsigned long used;} dictht;typedef struct dict{dictType *type;void *privdata;dictht ht;int rehashidx; /* rehashing not in progress if rehashidx == -1 */int iterators; /* number of iterators currently running */} dict;
页: [1]
查看完整版本: redis相关知识(二)