今天看看作为内存数据库,Redis 是怎么存储数据的以及键是怎么过期的。
阅读这篇文章你将会了解到:
- Redis 的数据库实现
- Redis 键过期的策略
数据库的实现
我们先看代码 server.h/redisServer
struct redisServer{ ... //保存 db 的数组 redisDb *db; //db 的数量 int dbnum; ...}
再看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 *ready_keys; /* Blocked keys that received a PUSH */ dict *watched_keys; /* WATCHED keys for MULTI/EXEC CAS */ int id; /* Database ID */ long long avg_ttl; /* Average TTL, just for stats */} redisDb;
总体来说redis的 server 包含若干个(默认16个) redisDb 数据库。