为了账号安全,请及时绑定邮箱和手机立即绑定

从零单排学Redis

标签:
Redis

这篇主要讲的内容有:

  • Redis服务器的数据库

  • Redis对过期键的处理

  • Redis持久化策略(RDB和AOF)

本文力求简单讲清每个知识点,希望大家看完能有所收获

一、Redis服务器中的数据库

我们应该都用过MySQL,MySQL我们可以在里边创建好几个库:

webp

MySQL创建几个数据库

同样地,Redis服务器中也有数据库这么一个概念。如果不指定具体的数量,默认会有16个数据库。

webp

通过SELECT命令可以切换到0~15的数据库

上面的命令我们也可以发现:当切换到15号数据库,存进15号库的数据,再切换到0号数据库时,是获取不到的!

  • 这说明,数据库与数据库之间的数据是隔离的。

1.1Redis数据库的原理

Redis服务器用redisServer结构体来表示,其中redisDb是一个数组,用来保存所有的数据库,dbnum代表数据库的数量(这个可以配置,默认是16)

struct redisServer{  

    //redisDb数组,表示服务器中所有的数据库
    redisDb *db;  
    
    //服务器中数据库的数量
    int dbnum;  
  
};

我们知道Redis是C/S结构,Redis客户端通过redisClient结构体来表示:

typedef struct redisClient{  
   
    //客户端当前所选数据库
    redisDb *db;  
     
}redisClient;

Redis客户端连接Redis服务端时的示例图:

webp

Redis客户端连接Redis服务端时的示例图

Redis中对每个数据库用redisDb结构体来表示:

typedef struct redisDb { 
    int id;         // 数据库ID标识
    dict *dict;     // 键空间,存放着所有的键值对              
    dict *expires;  // 过期哈希表,保存着键的过期时间                          
    dict *watched_keys; // 被watch命令监控的key和相应client    
    long long avg_ttl;  // 数据库内所有键的平均TTL(生存时间)     } redisDb;

从代码上我们可以发现最重要的应该是dict *dict,它用来存放着所有的键值对。对于dict数据结构(哈希表)我们在上一篇也已经详细说了。一般我们将存储所有键值对的dict称为键空间

键空间示意图:

webp



作者:Java3y
链接:https://www.jianshu.com/p/b5b2b04cb43f


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
手记
粉丝
174
获赞与收藏
959

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消