数据库|15张图解Redis为什么这么快
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
工作中你肯定和 Redis 打过交道 。 Redis 为什么快 , 这点想必你也知道 , 至少为了面试也做过准备 。 很多人知道 Redis 快仅仅因为它是基于内存实现的 , 对于其它原因倒是模棱两可 。
那么今天就和小编一起看看:
- 思维导图 -
基于内存实现
这点在一开始就提到过了 , 这里再简单说说 。
Redis 是基于内存的数据库 , 那不可避免的就要与磁盘数据库做对比 。 对于磁盘数据库来说 , 是需要将数据读取到内存里的 , 这个过程会受到磁盘 I/O 的限制 。
而对于内存数据库来说 , 本身数据就存在于内存里 , 也就没有了这方面的开销 。
高效的数据结构
Redis 中有多种数据类型 , 每种数据类型的底层都由一种或多种数据结构来支持 。 正是因为有了这些数据结构 , Redis 在存储与读取上的速度才不受阻碍 。 这些数据结构有什么特别的地方 , 各位看官接着往下看:
1、简单动态字符串
这个名词可能你不熟悉 , 换成 SDS 肯定就知道了 。 这是用来处理字符串的 。 了解 C 语言的都知道 , 它是有处理字符串方法的 。 而 Redis 就是 C 语言实现的 , 那为什么还要重复造轮子?我们从以下几点来看:
(1)字符串长度处理
这个图是字符串在 C 语言中的存储方式 , 想要获取 「Redis」的长度 , 需要从头开始遍历 , 直到遇到 '\\0' 为止 。
Redis 中怎么操作呢?用一个 len 字段记录当前字符串的长度 。 想要获取长度只需要获取 len 字段即可 。 你看 , 差距不言自明 。 前者遍历的时间复杂度为 O(n) , Redis 中 O(1) 就能拿到 , 速度明显提升 。
(2)内存重新分配
C 语言中涉及到修改字符串的时候会重新分配内存 。 修改地越频繁 , 内存分配也就越频繁 。 而内存分配是会消耗性能的 , 那么性能下降在所难免 。
而 Redis 中会涉及到字符串频繁的修改操作 , 这种内存分配方式显然就不适合了 。 于是 SDS 实现了两种优化策略:
- 空间预分配
具体分配规则是这样的:SDS 修改后 , len 长度小于 1M , 那么将会额外分配与 len 相同长度的未使用空间 。 如果修改后长度大于 1M , 那么将分配1M的使用空间 。
推荐阅读
- DataPipeline亮相2020数据库技术大会,揽获「技术卓越奖」
- WPC数据库中发现华为Mate 40E新型号 搭载麒麟990E芯片
- MySQL数据库数据归档回收工具使用场景分享-爱可生
- FLASK数据库模型
- 当数据库遇上"自动驾驶",阿里云 DAS 在自治诊断的突破
- 电脑重装系统教程来了,Win10 20H2正式版安装图解
- GPT家族又壮大了!OpenAI首次推出数学定理推理模型GPT-f,23个推导结果被专业数据库收录
- 图解|他们是山东科技最强“内核”,致敬齐鲁最美科技工作者
- 十分钟了解Mongodb数据库
- GitHub上两本图解网络/算法书火了,完整版开放下载