《Redis - 字符串对象》

一:概述

  - Redis 源码版本为3.0.0.

  - Redis 字符串命令请戳

  - OBJECT ENCODING key 查看数据底层类型实现。

  - 字符串最大字节为 512M.

 

二:总结

  - 使用 String 时,如果字符串不超过 32 字节且需要变动字符串,则可以重建字符串。(如果修改的话会引起底层数据类型的变动)

 

二:字符串对象的底层实现

  - 编码方式

    - 字符串对象共有三种编码方式 int/raw/embstr

  - 编码方式的选择

    - 如果对象保存的是整数,并且可以用long类型表示,编码为 int

    - 如果对象保存的是字符串,并且长度大于32字节,SDS保存,编码为 raw.(测试为35字节)

    - 如果对象保存的是字符串,并且长度小于32字节, 编码为 embstr.

  - embstr 编码方式

    - 专门保存短字符串的一种优化编码方式。

    - 和 SDS 一样,都是使用 redisObject 和 sdshdr 来表示字符串对象。

      - 但是 raw 编码会调用两次内存分配来分别创建。

      - embstr 只会调用一次(分配一块连续的内存)。

    - 相比与 raw 格式

      - embstr 内存分配次数更少。

      - 释放内存更快。

      - 更好的使用缓存。(连续内存)

    - embstr保存图示

      - 

    - raw保存图示

      - 

 

四:编码转换

  - 转换方式

    -  int/embstr 编码会在某些条件下,转换为 raw 编码的字符串对象。

  - 转换条件

    - 如果对象执行了一些命令,使得这个对象存的不在是整数值,那么会从 int -> raw。

    - Redis 没有为 embstr 的字符串编写任何修改程序,也可以说 embstr 编码是只读的。所以对 embstr 字符串修改是总会变成 raw 编码。 

 

五:字符串命令的实现

  - 

 

 

  

posted @ 2020-04-08 18:05  Zzz哈  Views(193)  Comments(0Edit  收藏  举报