redis为什么这么快?

发布于 2022-05-19 02:04

  • 运行在内存中。

  • 单线程。可以避免上下文切换,可以不用考虑锁的问题,可以避免创建销毁线程的耗时动作。

  • 采用多路复用技术。同时监听多个socket。使用epoll+事件监听机制。

  • 设计的时候也有很多的考虑。比如

    1. string使用了sds,记录了字符串的长度,这样就可以快速计算;

    2. list使用了压缩列表ziplist(list、hash和set都使用了这种格式,数据量少的时候使用)、双向链表(向前向后搜索都可以);快速链表,内部是由多个ziplist组成的,然后使用双向链表串起来。

    3. zset使用了跳跃链表。

    1. 数据结构的设计也相当的精巧。

    2. 根据实际存储的数据类型选择不同编码

  • 整个 Redis 就是一个全局 哈希表,他的时间复杂度是 O(1),而且为了防止哈希冲突导致链表过长,Redis 会执行 rehash 操作,扩充 哈希桶数量,减少哈希冲突。并且防止一次性 重新映射数据过大导致线程阻塞,采用 渐进式 rehash。巧妙的将一次性拷贝分摊到多次请求过程后总,避免阻塞。


------------------------

欢迎访问个人网站:

https://lessthinker.com



本文来自网络或网友投稿,如有侵犯您的权益,请发邮件至:aisoutu@outlook.com 我们将第一时间删除。

相关素材