avatar

目录
redis 为什么这么快

之前总是说“因为基于内存,所以redis特别的快”,那么具体详细的原因解释,这次深究一下:

基于内存

Redis 是基于内存的数据库,直接由 CPU 控制,也就是 CPU 内部集成的内存控制器,享受 CPU 通信的最优带宽。Redis 将数据存储在内存中,
读写操作不会因为磁盘的 IO 速度限制,所以是飞起一般速度体验

数据结构

Redis 支持 5 种数据类型:

  • String: 缓存、计数器、分布式锁等
  • List: 链表、队列、微博关注人时间轴列表等等
  • Hash: hash 表
  • Set: 去重、赞、踩、共同好友等
  • Zset:访问量排行榜、点击量排行榜等等

Redis 整体就是一个哈希表来保存所有的键值对,无论数据类型是 5 种中对的任意一种。哈希表,本质就是一个数组,
每个元素被叫做哈希桶,桶里面的 entry 保存着实际具体值的指针。哈希表的时间复杂度是O(1), 只需要计算每个键的哈希值,便知道对应的桶的位置,
定位桶里面的 entry 找到对应的数据,这也是 Redis 快的原因之一。

单线程模型

Rdis 的单线程,是指 Redis 的网络IO以及对指令读写是一个线程来执行的。对于 Redis 的持久化,集群数据同步,异步删除都是其他线程执行的。

  • 单线程的好处:
  1. 不会因为线程的创建导致性能消耗
  2. 避免上下文切换引起的 CPU 消耗,没有多线程切换的开销
  3. 避免了线程之间的竞争问题,比如添加锁、释放锁,不需要考虑各种锁的问题
  4. 代码逻辑更清晰、简单

因为 Redis 是基于内存操作的,CPU不是 Redis 的瓶颈,而 Redis 的瓶颈最有可能是机器内存大小或者网络带宽。

IO 多路复用模型

Redis 使用非阻塞 IO:IO 多路复用(多路,指的是多个 Socket 链接,复用指的是复用一个线程),使用单线程来轮询描述符,将数据库的
开、关、读、写都转换成了事件,Redis 采用自己的的事件分离器,效率比较高。

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

文章作者: Viola Tangxl
文章链接: https://violatangxl.github.io/2021/02/28/redis/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 椰子是只猫
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论