Redis学习笔记01-字符串对象
- 2020 年 1 月 22 日
- 筆記
底层实现
编码可以是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设计与实现》