redis学习总结

来源:互联网 发布:wiley数据库 编辑:程序博客网 时间:2024/05/22 03:27
  • Redis 服务器的所有数据库保存在redisServer.db数组中,而数据库的数量则是redisServer.dbnum属性保存。
  • 客户端通过修改目标数据库指针,让它指向redisServer.db数组中的不同元素来切换不同的数据库。
  • 数据库主要由dict和expires两个字典构成,其中dict字典负责保存键值对,而expires字典则负责保存键值的过期时间,
  • 因为数据库的键总是一个字符串对象,而值则可以是任意一种Redis对象类型,包括字符串对象,哈希表对象,集合对象,列表对象,有序集合对象,分别对应字符串键,哈希表键,集合键,列表键合有序集合键值。
  • expires 字典的键指向数据库中的某个键,而值则记录了数据库间的过期时间,过期时间是一个以毫秒为单位的UNIX时间错撮。
  • Redis使用惰性删除和定期删除两种策略来删除过期键值;惰性删除策略只在碰到过期键时才进行删除操作,定期删除策略则每隔一段时间主动查找并删除过期键值。
  • 执行SAVE命令或者BGSAVE命令所产生的新的RDB文件不会包含过期已经过期的键。
  • 执行BGREWRITEAOF命令错产生的重写AOF文件不会包含已经过期的键。
  • 一个过期键值被删除之后,服务器会一直追加一条DEL命令到现在的AOF文件来实现显式的删除过期键。
  • 当主服务器删除一个过期键之后,他会向所有服务器发送一条DEL命令,删除的过期键。
  • 从服务器即使发现过期键也不会自作主张的删除它,而是等待主节点发来的DEL命令,这种统一。中心化的过期键删除策略可以保证主从服务器数据一致性。
  • 当Redis命令对数据库进行修改之后,服务器会根据配置向客户端发送数据库通知。
  • RDB文件用于保存和还原Redis服务器所有数据库中的所有键值对数据。
  • SAVE命令有服务器进程直接操作,所以该命令会阻塞服务器。
  • BGSAVE命令由子进程执行保存操作,所以该命令不会阻塞服务器。
  • 服务器状态会保存所有用save选项设置的保存条件,当任意一个保存条件被满足时,服务器会自动执行BGSAVE命令。
  • RDB文件是一个经过压缩的二进制文件,由多个部分组成。
  • 对于不同类型的键值对,RDB文件会使用不同的方式来保存它们。
  • AOF文件通过保存所有修改数据库的写命令请求来记录服务器的数据库状态。
  • AOF文件中的所有命令都是以Redis命令请求协议格式保存。
  • 命令请求会先保存到AOF缓冲区里面,之后在定期写入并同步AOF文件。
  • appendfsync选项中的不同值对AOF持久化功能的安全性以及Redis服务器的性能有很大的影响。
  • 服务器只要再入并重新执行保存在AOF文件中的命令,就可以还原数据库本来的状态。
  • AOF重写可以产生一个新的AOF文件,这个新文件和原有的文件所保存数据库的状态是一样的,但是体积更小。
  • AOF充血是一个歧义的名字,该功能是通过读入数据库中的键值对来实现的,程序无需对现有的AOF文件进行读入/分析/或者写操作。
  • 在执行BGREWRITEAOF命令时,Redis服务器会维护一个AOF重写缓冲区,该缓冲区会在子进程创建新AOF文件的工作之后,服务器会将重写缓冲区的所有内容追加到新AOF文件的末尾,使得新旧两个AOF文件保存数据库状态一直。最后,服务器用到新的AOF文件替换AOF文件,以此来完成AOF文件重写操作。
  • Redis服务器是一个事件驱动程序,服务器处理的事件分别时间事件和文件事件两类。
  • 文件事件处理器是基于Reactor模式实现的网络通信程序。
  • 文件事件是对套接字操作的抽象:每次套接字变为可应答,可写或者可读时,相应的文件事件就会产生。
  • 文件事件为别AE_READABLE事件和AE_WRITEABLE事件两类。
  • 时间事件分别为定时事件和周期性事件:定时事件只是指定的时间到达一次,而周期事件则每隔一段时间到达一次。
  • 服务器在一般情况下只执行servercron函数一个时间事件,并且这个事件是周期性事件。
  • 文件事件和时间事件之间是合作关系,服务器会轮流处理两种事件,并且处理事件的过程中也不会进行抢占。
  • 时间事件的实际处理时间通常会比设定的到达时间晚一些。
  • 服务器状态结构使用clients量表连接起多个客户端状态,新添加的客户端状态会被放到链表的末尾。
  • 客户端状态的flags属性使用不同标志来表示客户端的角色,以及客户端房前所处的状态。
  • 输入缓冲区记录了客户端发送的命令请求,这个缓冲区的大小不能超过1GB。
  • 命令的参数和参数的个数会被记录在客户端状态的argv和argc属性页面里面,其固定大小缓冲区的最大大小为16K,而可变大小缓冲区的最大大小不能超过服务器设置的硬性限制值。
  • 输出缓冲区限制值有两种,如果输出缓冲区的大小超过服务器设置的硬性限制,那么客户端会被立刻关闭,除此之外如果客户端在一定时间内,一直超过服务器设置的软性限制,那么客户端也会被关闭。
  • 当一个客户端通过网络连接上服务器时,服务器会为这个客户端创建相应的客户端状态。网络连接关闭/发送了不和协议格式的命令请求,成为CLIENT KILL命令的目标,空转时间超时。输出缓冲区的大小超过限制,以上这些原因都会造成客户端被关闭哦。
  • 处理Lua脚本的伪客户端在服务初始化是创建,这个客户端会一直存在,直到服务关闭。
  • 载入AOF文件时使用的伪客户端在载入工作开始时创建,载入工作完毕之后关闭。
原创粉丝点击