天增的博客
首页
博客
  • 分布式解决方案
  • Java并发工具包
  • redis
  • LeetCode
  • 系统设计
  • JVM体系
Github (opens new window)
Rss (opens new window)
  • zh-CN
  • en-US
首页
博客
  • 分布式解决方案
  • Java并发工具包
  • redis
  • LeetCode
  • 系统设计
  • JVM体系
Github (opens new window)
Rss (opens new window)
  • zh-CN
  • en-US
  • redis
  • Redis为什么这么快
    • redis单线程的问题
  • Redis基本数据结构
    • String的底层实现
    • List的底层实现
    • Hash的底层实现
    • Set的底层实现
    • ZSet的底层实现
  • Redis分布式缓存
    • 缓存击穿
    • 缓存穿透
    • 缓存雪崩
    • 缓存预热
  • Redis的分布式锁
    • 看门狗模式
    • Redlock
  • Redis集群
    • Redis数据淘汰策略
    • redis持久化
    • Redis数据删除策略
  • topic
  • redis
  • Redis为什么这么快
2022-04-28

Redis为什么这么快

# Redis为什么这么快

# 完全基于内存

所有的运算都是内存级别的。

# 数据结构简单

Redis中所有的数据结构都是重新设计过的,这些重新设计的数据结构大部分时间复杂度都是O(1)。 举例:string这个类型没有采用C原生的string,而是重新设计了一套sds(simple dynamic string)的结构

# 工作线程采用单线程,避免了线程上下文切换所带来的损耗

redis的作者认为,性能瓶颈是在于内存或者网络带宽并非cpu,所以多线程并不会带来更大的提升(其实是作者懒,强行解释)。

Redis的网络IO和键值对读写是由一个线程来完成的,Redis在处理客户端的请求时包括获取 (socket 读)、解析、执行、内容返回 (socket 写) 等都由一个顺序串行的主线程处理,这就是所谓的“单线程”。 这也是Redis对外提供键值存储服务的主要流程。

6.0之后,Redis的其他功能, 比如持久化、异步删除、集群数据同步等等,其实是由额外的线程执行的。 因此说,Redis工作线程是单线程的,但是,整个Redis来说,是多线程的(多线程默认是关闭的).

# 对于客户端的连接采用多路复用和非阻塞I/O

Redis使用I/O多路复用功能来监听多个socket连接客户端, 这样就可以使用一个线程连接来处理多个请求,减少线程切换带来的开销,同时也避免了 I/O 阻塞操作

最近更新
01
以 root 身份启动 transmission-daemon
12-13
02
Debian系统安装qbittorrent-nox
12-09
03
LXC Debain12安装zerotier并实现局域网自动nat转发
07-29
更多文章>
Theme by Vdoing | Copyright © 2015-2024 天增 | 苏ICP备16037388号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式