• 《Redis设计与实现》读书笔记


    (重点部分加粗)

    第9章 :单机NoSql

    1.RedisServer有一个dbnum属性,默认值为16,所以Redis服务器会创建16个数据库。
    2.SELECT命令:切换数据库
    原理:通过修改RedisClient.db指针,让它指向服务器中的不同数据库,从而实现切换数据库的功能。
    3.数据库键空间
    dict字典保存了数据库中所有的键值对,这个字典称为"键空间"

    另外的,expires字典保存了数据库中所有键的过期时间,称为"过期字典"。

    4.设置键的生存时间或过期时间(重点)

    EXPIRE命令:以秒为精度,为某个键设置生存时间。(Time To Live,TTL,指的是键可以存在多久)
    PEXPIRE命令:以毫秒为精度,为某个键设置生存时间。

    EXPIREAT:以秒为精度,为某个键设置过期时间(Expire Time,就是指键什么时候会删除)。
    PEXPIREAT:以毫秒为精度,为某个键设置过期时间。
    过期时间是一个Unix时间戳。
    EXPIRE命令、PEXPIRE命令、EXPIREAT命令,这三个命令都是使用PEXPIREAT命令来实现的。
    TTL命令和PTTL命令,接受一个带有生存时间或者过期时间的键,返回这个键的剩余生存时间。

    5.过期键删除策略(重点)

    定时删除:在设置键的过期时间的同时,创建一个定时期,让定时器在键的过期时间来临时,立即对键进行删除操作。
    定时删除的缺点是:占用太多CPU时间,影响服务器的响应时间和吞吐量。
    惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查键是否过期。如果过期的话,就删除该键。如果没有过期,就返回该键。
    惰性删除的缺点是:浪费太多内存,有内存泄漏的风险。
    定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。
    定期删除比前两种策略好一些,但是需要调整好删除的频率和时长。
    6.当一个过期键被删除之后 ,服务器会追加一条DEL命令到现有AOF文件的末尾。
    7.当主服务器删除一个过期键后,主机会向所有的从机发送一条DEL命令。
    从机即使发现过期键,也不会去删除它,而是等待主机发来DEL命令,可以保证主从服务器数据的一致性。

    第10章:RDB持久化(重点)

    Redis的持久化是什么意思?就是从内存中,保存到磁盘里面。
    1.RDB文件用于保存和还原Redis服务器所有数据库中的所有键值对数据。
    2.SAVE命令由服务器进程直接执行保存操作,会阻塞服务器。
    3.BGSAVE命令由子进程执行保存操作,所以不会阻塞服务器。
    4.RDB文件是一个经过压缩的二进制文件,由多个部分组成。
    RDB文件包含:
    (1)"REDIS"五个字符:检查所载入的文件是否RDB文件。
    (2)db_version:记录RDB文件的版本。
    (3)databases:包含多个数据库,以及各个数据库中的键值对数据。
    (4)EOF:表示文件的结尾。
    (5)check_sum:保存一个校验和,通过对前面几个部分的内容进行计算得出的和。服务器在载入RDB文件时,会和check_sum进行对比,以此检查RDB文件是否出错 。
    5.RDB文件是保存在磁盘里面的的。
    6.如果服务器开启了AOF持久化,那么服务器会优先使用AOF。因为AOF文件的更新频率通常比RDB文件的更新频率高。
    7.自动间隔性保存:可以在redis.conf里面设置,让服务器每隔一段时间自动执行一次BGSAVE命令。

    第11章:AOF持久化(重点)

    AOF(Append Of File)持久化:通过保存Redis服务器所执行的写命令来记录数据库状态。

    AOF持久化功能的实现分为:命令追加(append)、文件写入、文件同步(sync)三步。
    命令追加:写命令会被追加到aof_buf缓冲区的末尾。
    AOF文件的写入与同步:
    appendfsync选项的设置对安全性和性能有很大影响非常重要。

    appendfsync的值为always时,写入并同步,效率最慢,最安全。
    appendfsync设置为everysec时,写入并同步,效率够快,就算故障停机,也只丢失一秒的命令数据。
    appendfsync为no时,只将aof_buf缓冲区内容写入到AOF文件,不执行同步。
    AOF文件的载入与数据还原
    Redis服务器只要读入并重新执行一遍AOF文件保存的写命令,就可以还原关闭之前的数据库状态。
    AOF重写(rewrite)
    AOF文件的内容越来越多,文件体积越来越大,Redis提供AOF文件重写功能。
    AOF重写的原理:首先从数据库中读取键现在的值,然后用一条命令去记录键值对,代替之前记录这个键值对的多条命令。
    AOF后台重写(BGREWRITEAOF命令)
    为了避免线程长时间阻塞,Redis将AOF重写放到子进程里执行。
    为了使得服务器当前数据库状态和重写后的AOF文件所保存的数据库状态一致,会在AOF重写期间,将写命令追加到AOF缓冲区和AOF重写缓冲区。

    第12章 事件

    1.Redis服务器是一个事件驱动程序。服务器要处理两类事件:
    (1)文件事件:Redis服务器通过套接字与客户端进行连接,而文件事件就是服务器对套接字操作的抽象。
    (2)时间事件:Redsi服务器的操作(比如serverCron函数)需要在给定的时间执行。
    2.Redis基于Reactor模式开发网络事件处理器。
    3.IO多路复用:Redis虽然是单进程单线程,但事件处理器使用IO多路复用来同时监听多个套接字,实现高性能的网络通信模型。
    IO多路复用,基于select、epoll、evport、kqueue模型。
    4.文件事件处理器的组成 :

    5.文件事件类型:AE_READABLE(可读)事件、AE_WRITABLE(可写)事件。
    6.时间事件分两类:
    (1)定时事件:在指定时间执行。(2)周期性事件:每隔一段时间执行。
    7.ServerCron函数:周期性事件。它的主要工作包括:
    (1)更新服务器的各类统计信息。比如内存占用。
    (2)清理数据库中的过期键值对。
    (3)关闭和清理失效的客户端 。
    (4)尝试进行AOF或RDB持久化操作。
    (5)如果服务器是主服务器,那么会对服务器进行定期同步。
    (6)如果处于集群模式,会对集群进行定期同步和连接测试。

  • 相关阅读:
    概述和HTTP请求 和 响应处理
    编写一个函数,在页面上输出一个N行M列的表格,表格内容填充1~100的随机数字
    js简介及js基本数据类型
    浅谈 Java线程状态转换及控制
    浅谈 Java多线程
    浅谈 ArrayList 及其扩容机制
    Java 中 static 的作用
    合并两个有序数组
    贪心算法——换酒问题
    查找——二分查找
  • 原文地址:https://www.cnblogs.com/expiator/p/10428655.html
Copyright © 2020-2023  润新知