浅说一下Redis在内存的存储结构
1、介绍
Redis 是内存存储;我们放在Redis的数据,都是以键值对形式,存在内存;
2、数据库结构
typedef struct redisDb {
dict *dict;
dict *expires;
dict *blocking_keys;
dict *ready_keys;
dict *watched_keys;
int id;
long long avg_ttl;
list *defrag_later;
} redisDb;
重点关注dict结构;他代表了我们存入的key-value存储,我们平常添加数据,就是往dict里添加
可以看到,dict其实就是我们前面介绍的hash对象结构
typedef struct dict {
dictType *type;
void *privdata;
dictht ht[2];
long rehashidx; /* rehashing not in progress if rehashidx == -1 */
unsigned long iterators; /* number of iterators currently running */
} dict;
redisDB即数据库对象,指向了数据字典,字典里面包含了我们平常存储的k-v数据,k是字符串对象,value是任意Redis对象
3. 过期键
Redis数据都可以设置过期键,这样到了一定时间,这些对象就会自动过期并回收,那么过期键,又是存储在哪里的?
过期键存储在expires字典上
注意,这里的dict中和expires中key对象,实际都是存储的String对象指针,所以并不会重复占用内容,Redis对内存的使用都是很珍惜的
转载自:https://juejin.cn/post/7390413094445383680