《REDIS设计与实现》读书笔记之一 SDS类型

    SDS类型是Simple Danamic String的缩写,即为简单动态字符串,Redis使用这个类型来替换C语言中的基础类型CHAR字符串,好处显而易见,C语言程序都很容易理解:减低获取字符串长度的复杂度,防止字符串溢出,减少内存的分配释放次数,二进制安全,兼容C标准库等。
    这些都是很容易理解的,C语言程序员如果使用内存池,多数都会使用相同或者类似的数据结构来完成字符串或者二进制数的存储,但是我在阅读完这一章节之后,还是产生了一些小小的疑问的。

      1.作为数据库的基础数据类型,一般都是采用基本的数据类型,或者类似于基本数据类型的类型来表示数据,Redis只用结构类型来存储数据,如果使用SQL语句或者操作命令还进行操作?
       2.Redis使用SDS来保存数据,虽然从设计的角度看,是有减少分配和释放动作的设计,但是如果直接调用系统接口分配护着释放内存,那么性能消耗还是会比较大的,我想Redis应该也不会这么设计,理论上来说,还是应该操作预先分配好的内存池,而所谓的内存分配和释放,也都是逻辑意义上的分配与释放而已。
      3.Redis使用预分配和惰性释放的方式来减少分配和释放的次数,这样的操作虽然可以减少分配释放次数,但是是否会产生大量的内存碎片,因为Redis在SDS类型上并没有使用页面池,这样频繁的操作,不管是物理内存还是逻辑内存,都有可能产生大量的内存碎片。
      今天学习完《REDIS设计与实现》第一章,上面的问题希望能在后面的学习中得到解答。


猜你喜欢

转载自blog.csdn.net/wellshine/article/details/80977579
sds