Redis为什么快


基于内存

 

的数结构

re d i s 数 据 结 构  字 符 创 String  列 表 List  哈 希 表 Hash  集 Set  有 序 集 合 zset  动 态 字 符 串  双 端 链 表  压 缩 链 表  跳 跃 表

合理的数编码

  • String:如果存数字的,是用int型的编码;如果存非数字,小于等于39字的字符串,是embstr;大于39个字是raw编码
  • List:如果列表的元素个数小于512个,列表个元素的都小于64字),使用ziplist编码,否使用linkedlist编码
  • Hash:型元素个数小于512个,所有小于64字,使用ziplist编码,否使用hashtable编码
  • Set:如果集合中的元素都是整数且元素个数小于512个,使用intset编码,否使用hashtable编码
  • Zset:当有序集合的元素个数小于128个,个元素的小于64字节时,使用ziplist编码,否使用skiplist(跳表)编码

 

合理的线程模型

Redis是单线程的,是指Redis的IO和键值对读写是由一个线程来完成的但Redis的其他功能,比如持久化、异步删除、集群数等等,实际是由外的线行的。

 

IO多路

I/O : I/O

多路 :多个络连

用:用同一个线程。

IO多路用其就是一IO模型,实现了一个线程可以监视多个文件句柄;一旦某个文件句柄就,就能通知用程序行相写操作;而没有文件句柄就绪时,就会阻用程序,交出cpu。