1、内存
2、高效的数据结构
SDS简单动态字符串(使用长度+空闲长度+实际内容)
记录了使用长度:时间复杂度o(1),性能提高
空闲长度:空间预分配,修改不需要频繁分配长度,使用长度>1M,分配1M,否则多分配自身长度的空闲长度
惰性释放:缩短长度,不急着释放,下次增加可直接使用空闲空间
二进制安全:SDS记录使用长度,C只认“\0”,二进制数据丢失
linkedlist双端列表
记录前后节点,list结构有头尾指针,节点数量
ziplist压缩列表
占用内存字节数+头到尾偏移量+节点数量+实际内容1+实际内容2+尾标志
特殊编码+内存连续分配
quicklist(linkedlist+ziplist)
节点用ziplist,节点间使用双向指针
字典(哈希表)
k-v,时间复杂度o(1)-快
skiplist跳跃表
链表+多级索引
3、合理的数据编码
4、IO多路复用模型
多线程 cpu上下文切换,不必要的损耗,redis使用Reactor单线程,内存,没有上下文切换,最佳方案
应对大量的请求,Redis 中使用 I/O 多路复用程序同时监听多个套接字,并将这些事件推送到一
个队列里,然后逐个被执行。最终将结果返回给客户端。