数据库|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的使用空间 。
- 更新了!深入浅出图解Git,入门到精通(保姆级教程)第三篇
- openGauss魔改PG?它能兼容Oracle的数据库表吗?
- 分布式数据库Hbase入门介绍
- 屏幕数据简报〡realme Q2
- 图解|什么是高并发利器NoSQL
- 分布式SQL数据库新的演变方向
- 带你了解MySQL数据库小技巧
- 图解|零拷贝Zero-Copy技术大揭秘
- 关系型数据库管理系统openGauss 1.0.1版本发布
- 组态王与SQL数据库通讯--①定义ODBC数据源