服务器中的数据库
- 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文件中。
- RDB :
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-11-06 07:17:18