码迷,mamicode.com
首页 > 数据库 > 详细

Redis 专题二: RDB 与 AOF 持久化

时间:2015-08-31 19:41:30      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:redis   数据库   

服务器中的数据库

  • Redis服务器将所有数据库都保存在服务器状态结构的db数组中,db数组的每个项都是一个RedisDb结构,一个RedisDb结构数组的长度就代表了数据库的个数。默认情况下Redis的目标数据库是0号数据库,但客户端可以通过执行SELECT命令来切换数据库
    技术分享
    在服务器内部,客户端状态redisClient结构的db属性记录了客户端当前的目标数据库,这个属性是一个指向RedisDb的指针
typedef struct redisClient{
    //...
    //记录客户端当前正在使用的数据库
    redisDb *db;
} redisClient;
db[0],db[1],db[2],db[n]


客户端通过改变redisClient.db的指针,让它指向服务器中的不同数据库,从而实现切换目标数据库的功能。
这就是SELECT实现的原理


struct redisServer{
    //...
    //一个数组,保存着服务器中的所有数据库
    reddisDb *db;
    //服务器的数据库数量
    int dbnum;
    //...
}
db[0],db[1],db[2],db[n]

持久化

  • 因为Redis是内存数据库,它将自己的数据库状态存储在内存里面。所以如果不即使的把存放在内存里的数据写入到磁盘,那么一旦服务器宕机数据将全部消失。”持久化”呼之欲出,持久化的实质是将数据写到磁盘,保证数据”持久”可用。

  • 为什么把数据放内存? 这就是Redis与其它关系型数据库的区别,虽然关系型数据库(例如:mysql)也有把部分数据放入到内存,但是仅仅是部分,为了提高缓存命中率mysql会把常用数据放到内存里(buffer cache),这样就可以尽量多的减少数据库去磁盘读取数据的次数,因为在一次物理I/O中,磁盘寻道占据了读取数据所用总时间的绝大一部分,我们想让更多的读写都是逻辑I/O(内存读写)而不是物理I/O。所以Redis的特性适合高频率,高速读写的业务。

    • RDB :
      RDB持久化可以在指定的时间间隔内生成数据的时间点快照

    • 创建新的RDB文件:
      在执行SAVE命令或者BGSAVE命令创建一个新的RDB文件时,程序会对数据库中的键进行检查,已过期的键不会被保存到新创建的RDB文件中。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Redis 专题二: RDB 与 AOF 持久化

标签:redis   数据库   

原文地址:http://blog.csdn.net/bugall/article/details/48137965

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!