text: quicklist数据结构是redis在3.2才引入的一个双向链表的数据结构，确实来说是一个ziplist的双向链表。quicklist的每一个数据节点是一个ziplist，ziplist本身就是一个紧凑列表，假使，quicklist包含了5个ziplist的节点，每个ziplist列表又包含了5个数据，那么在外部看来，这个quicklist就包含了25个数据项。
  quicklist的结构的设计简单总结起来，是一个空间和时间的折中方案：
  双向链表可以在两端进行push和pop操作，但是它在每一个节点除了保存自身的数据外，还要保存两个指针，增加额外的内存开销。其次是由于每个节点都是独立的，在内存地址上并不连续，节点多了容易产生内存碎片。
  ziplist本身是一块连续的内存，存储和查询效率很高，但是，它不利于修改操作，每次数据变动时都会引发内存realloc，如果ziplist长度很长时，一次realloc会导致大批量数据拷贝。
  所以，结合ziplist和双向链表的优点，quciklist就孕育而生。
  redis在自己的对象系统中构建了一个引用计数方法，通过这个方法程序可以跟踪对象的引用计数信息，除了可以在适当的时候进行释放对象，还可以用来作为对象共享。举个例子，假使健A创建了一个整数值100的字符串作为值对象，这个时候键B也创建保存同样整数值100的字符串对象作为值对象，那么在redis的操作时：
  假使，我们的数据库中指向整数值100的键不止键A和键B，而是有几百个，那么redis服务器中只需要一个字符串对象的内存就可以保存原本需要几百个字符串对象的内存才能保存的数据。
  在redis2.8之后，使用psync命令代替sync命令来执行复制的同步操作，psync命令具有完整重同步和部分重同步两种模式：
  其中完整同步用于处理初次复制情况：完整重同步的执行步骤和sync命令执行步骤一致，都是通过让主服务器创建并发送rdb文件，以及向从服务器发送保存在缓冲区的写命令来进行同步。
  部分重同步是用于处理断线后重复制情况：当从服务器在断线后重新连接主服务器时，主服务可以讲主从服务器连接断开期间执行的写命令发送给从服务器，从服务器只要接收并执行这些写命令，就可以讲数据库更新至主服务器当前所处的状态。
  如果网络的抖动或者是短时间的断链也需要进行完整同步就会导致大量的开销，这些开销包括了，bgsave的时间，rdb文件传输的时间，slave重新加载rdb时间，如果slave有aof，还会导致aof重写。这些都是大量的开销所以在redis2.8之后也实现了部分重同步的机制。
  当一个键处于过期的状态，其实在redis中这个内存并不是实时就被从内存中进行摘除，而是redis通过一定的机制去把一些处于过期键进行移除，进而达到内存的释放，那么当一个键处于过期，redis会在什么时候去删除？几时被删除存在三种可能性，这三种可能性也代表了redis的三种不同的删除策略。
  惰性删除：放任键过期不管，但是每次从键空间获取键时，都会检查该键是否过期，如果过期的话，就删除该键。
  定期删除：每隔一段时间，程序都要对数据库进行一次检查，删除里面的过期键，至于要删除多少过期键，由算法而定。
  设置键的过期时间，创建定时器，一旦过期时间来临，就立即对键进行操作操作，这种对内存是友好的，但是对cpu的时间是最不友好的，特别是在业务繁忙，过期键很多的时候，删除过期键这个操作就会占据很大一部分cpu的时间，要知道redis是单线程操作，在内存不紧张而cpu紧张的时候，将cpu的时间浪费在与业务无关的删除过期键上面，会对redis的服务器的响应时间和吞吐量造成影响。另外，创建一个定时器需要用到redis服务器中的时间事件，而当亲时间事件的实现方式是无序链表，时间复杂度为O(n),让服务器大量创建定时器去实现定时删除策略，会产生较大的性能影响，所以，定时删除并不是一种好的删除策略。
  与定时删除相反，惰性删除策略对cpu来说是最友好的，程序只有在取出键的时候才会进行检查，是一种被动的过程。与此同时，惰性删除对内存来说又是最不友好的，一个键过期，只要不再被取出，这个过期键就不会被删除，它占用的内存也不会被释放。很明显，惰性删除也不是一个很好的策略，redis是非常依赖内存和骁好内存的，如果一些长期键长期没有被访问，就会造成大量的内存垃圾，甚至会操成内存的泄漏。
  在对执行数据写入时，通过expireIfNeeded函数对写入的key进行过期判断，其中expireIfNeeded在内部做了三件事情，分别是：
  可以说redis可谓博大精深，简单的七连问或者只是盲人摸象，或者这次只是摸到了一根象鼻子，或者还应该顺着鼻子向下摸，下次可能摸到了一只象耳朵，只要愿意往下深入去了解去摸索，而不只应用不思考，总有一天会把redis这种大象给摸透了。