Redis为什么这么快

Redis是一个高性能的key-value数据库,其速度得益于完全基于内存的操作、简单的数据结构如String、list、set等,以及单线程模型和多路复用I/O。Redis使用非阻塞IO和自建的VM机制,减少了系统调用的时间消耗,提升了处理命令的效率。
摘要由CSDN通过智能技术生成

Redis(Remote Dictionary Server),即远程字典服务,是一个使用 C 语言编写,开源的(BSD许可)高性能的(key-value)非关系型的键值对数据库,是当前最热门的(NoSQL)数据库之一,也称为数据结构服务器。

官方数据显示,Redis 读的速度是110000次/s,写的速度是81000次/s

那么,为什么 Redis 存储会这么快呢?

我们从以下几点进行分析:

  • 完全基于内存

        绝大部分请求是纯粹的内存操作,非常快速,数据存在内存中,类似于HashMap,HashMap的优势就在于查找的操作时间复杂度为O(1)

  • 数据结构简单

        Redis使用的是专门设计过的数据结构

        Redis 有五种数据结构:String、list、set、hash、zset

  1. String:简单动态字符串,是可以修改的字符串,内部结构类似 Java 的 ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配。
  2. list:快速链表(quickList),支持双向操作,纯粹理解的话,可以简单的理解为双向链表结构(实际结构还需要自己深究)
  3. set:hash 表,和 Java 中的 hashset 类似,底层使用的是 hashmap,不过所有的 value 都指向同一个内部值
  4. hash:键值对(hash表),底层使用的是 ziplist 或者 hashtable 实现的,另外 hash结构底层的 hashmap 扩容和 java 中hashmap扩容机制不同,redis 中采用的渐进式 rehash 方式
  5. zset:hash + 跳跃表,其中 hash 的作用是关联 value 和 score,跳表的目的是给元素value进行排序,根据 score 的范围获取元素列表
  • 单线程

        Redis 处理命令时,采用的是单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程和多线程导致的切换,减少了CPU的损耗,同时,不用去考虑各种锁的问题,不存在加锁和释放锁的操作,没有因为可能出现死锁而导致的性能消耗

  • 多路复用I/O

        是非阻塞IO,写入时仍可以读,不过读取的是写入前的数据

  • 底层模型不同

        底层实现方式和客户端之间通信的应用协议不一样,Redis 直接构建了自己的 VM 机制,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求

以上就是个人理解的 Redis 存储快的原因了

我是【辛勤de小蜜蜂】关注我,我们下期见


  • 由于博主才疏学浅,难免会有纰漏,假如您发现了错误或遗漏的地方,还望留言斧正,我会尽快对其加以修正。

  • 如果您觉得文章还不错,您的转发、分享、点赞、留言就是对我最大的鼓励。

  • 感谢您的阅读,十分欢迎并感谢您的关注。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辛勤de小蜜蜂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值