一.Redis 简介 by TEnth丶

213 阅读3分钟

一.Redis 简介

Redis英文拼写: REmote DIctionary Server

redis是一个高性能的key-value数据库,它是完全开源免费的,而且redis是一个NOSQL类型数据库,是为了解决高并发、高扩展,大数据存储等一系列的问题而产生的数据库解决方案,是一个非关系型的数据库。但是,它也是不能替代关系型数据库,只能作为特定环境下的扩充。

Redis的优势和特点

  1. redis数据读写速度非常快,因为它把数据都读取到内存当中操作,而且redis是用C语言编写的,是最“接近“”操作系统的语言,所以执行速度相对较快。
  2. redis虽然数据的读取都存在内存当中,但是最终它是支持数据持久化到磁盘当中。
  3. redis提供了丰富的数据结构。
  4. redis的所有操作都是原子性,支持事务,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行。
  5. redis支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。

Redis的应用场景

  1. redis由于数据的读取和操作都在内存当中操作,读写的效率较高,所以经常被用来做数据的缓存。把一些需要频繁访问的数据,而且在短时间之内不会发生变化的,放入redis中进行操作。从而提高用户的请求速度和降低网站的负载,降低数据库的读写次数,就把这些数据放到缓存中。
  2. 一些常用的实时计算的功能。需要实时变化和展示的功能,就可以把相关数据放在redis中进行操作。大大提高效率。
  3. 消息队列,经常用来构建类似实时聊天系统的功能,大大提高应用的可用性。

Redis 简化的源码框架

从main()分析,redis主要做了几件事:

  • redis原理:在内存层面用类型、key_len、ken、value_len、value存储数据,在文件中一行一条数据(kv关系)。
  • 设置默认参数
  • 创建对象、持久化定时器回调
  • 加载文件参数
  • 加载文件数据写入字典
  • 创建client connect事件handler(accept后,写入读写事件select(),最新的版本用epoll)
  • 调用事件多路复用循环
  • 退出
int main(int argc, char * *argv)
{
    initServerConfig();     // 设置默认参数
    initServer();           // 设置系统信号、字典、对象链表、公共对象、事件(文件,定时器)、6379服务器、持久化回调定时器if (argc == 2) {        // 使用配置文件替代部分默认参数
        ResetServerSaveParams();
        loadServerConfig(argv[1]);
        redisLog(REDIS_NOTICE, "Configuration loaded");
    }
    else if (argc > 2) {
        fprintf(stderr, "Usage: ./redis-server [/path/to/redis.conf]\n");
        exit(1);
    }
​
    redisLog(REDIS_NOTICE, "Server started");
​
    if (loadDb("dump.rdb") == REDIS_OK)             // 加载数据到字典
        redisLog(REDIS_NOTICE, "DB loaded from disk");
​
    if (aeCreateFileEvent(server.el, server.fd, AE_READABLE, 
        acceptHandler, NULL, NULL) == AE_ERR)
        oom("creating file event");             // 注册6379客户端连接事件处理
​
    redisLog(REDIS_NOTICE, "The server is now ready to accept connections");
    aeMain(server.el);                      // 定时/网络读写事件多路复用监听
    aeDeleteEventLoop(server.el);       // 销毁事件循环,退出redis进程
    return 0;
}