在上一篇文章中,我和大家介绍了Redis的前世今生,Redis的诞生就是为了解决mysql中IO性能的瓶颈,这一篇就和大家一起揭秘Redis神秘的面纱,第一个我们就来聊一聊Redis数据类型中的String!
Redis最常用的数据类型有五种
五种其实是Redis键值对中值存储的数据类型,而他们的底层数据结构一共有6种:分别是
数据类型和数据结构的对应关系如下图:
这张图会在未来几篇文章中反复出现,帮大家彻底了解Redis的基础类型。
今天我们就来聊一聊其中的string
众所周知,Redis是用C语言写的,那Redis为什么没有使用C原生的字符串,而是自己创建了一个简单动态字符串?(SDS simple dynamic string)
C语言的字符串底层是用字符数组来实现的,在一片连续的空间中依次存放字符,为了判断字符的结束,他会在最后以'\0'
作为识别,这样就会带来以下问题
'\0'
是不可以的,这就会导致一些如图片,音频等出现了'\0'
就会出现问题。'\0'
才可以操作,会导致效率比较低,复杂度为o(n)
C语言的字符串是不记录字符串长度的,一旦我们调用了拼接函数等,而没有提前计算好内存,就会产生缓冲区溢出的情况,所以为了不出问题,会进行内存重分配,而这又多出了内存重分配的性能损耗。
那么,Redis是怎么处理这些问题的呢?
Redis中的字符串数据是通过简单动态字符串(以下简称SDS)来存储数据的。
我们先来看看SDS的结构长什么样