数据库 ·

Redis学习笔记01-字符串对象

底层实现

编码可以是int、raw、embstr

整数值

  • 编码为int
  • 整数值,可以用long类型来表示
  • ptr属性中直接保存

字符串结构

使用redisObject结构和sdshdr结构,有raw、embstr两种编码、

embstr

  • 字符串值的大小小于等于32字节
  • 通过调用一次内存分配函数来分配一块连续的空间
  • 用来保存短字符串对象的好处
    • 1)将创建字符串对象所需的内存分配次数从raw编码的两次降低为一次。
    • 2)释放embstr编码的字符串对象只需要调用一次内存释放函数,raw需要调用两次。
    • 3)所有数据都保存在一块连续的内存里,所以这种编码的字符串对象比raw编码的对象能更好的利用缓存带来的优势。
  • 实际上是只读的

raw

  • 字符串值的长度大于32字节
  • 调用两次内存分配函数来分别创建redisObject结构和sdshdr结构

注意

可以用long double类型表示的浮点数Redis中也是作为字符串值来保存的。

  • 将浮点数保存到字符串对象中时,先转换为字符串值
  • 再保存转换所得的字符串值

int编码的字符串对象和embstr编码的对象在条件满足的情况下会被转换成raw编码的字符串对象

  • 对于init编码的字符串:若向对象执行一些命令,使得该对象保存的不再是整数值,而是一个字符串值,那么字符串对象的编码将从int转为raw。
  • 对于embstr编码的字符串对象:执行任何修改命令时,程序会先将对象的编码从embstr转换为raw,然后执行修改命令。因此,总会变成一个raw编码的字符串对象。

字符串对象是Redis五种对象中唯一一种会被其他四中类型对象嵌套的对象。

基础命令

暂时不过多展开。

  • 创建: SET Key Value
  • 获取:GET Key

参考资料

《Redis设计与实现》

参与评论