redis 查看字符串Value数据类型

1.  redis中存储的字符串到底是什么数据类型

测试如下:

10.38.162.118:7004> set quickapp_test 123

OK

10.38.162.118:7004> OBJECT type quickapp_test

(error) ERR Syntax error. Try OBJECT (refcount|encoding|idletime)

10.38.162.118:7004> OBJECT encoding quickapp_test

"int"

10.38.162.118:7004> OBJECT encoding quickapp_test

"int"

10.38.162.118:7004> set quickapp_test1 'abc'

OK

10.38.162.118:7004> OBJECT encoding quickapp_test1

"embstr"

10.38.162.118:7004> set quickapp_test2 'abchhhhhhhhhhhhhhhhhsssssssssssssssssssssssssssssssssssssssss12222222222222222xxxxxxxxx'

OK

10.38.162.118:7004> OBJECT encoding quickapp_test2

"raw"

2.   查看数据类型命令

OBJECT type xx

上述测试发现:

当我们存储的是123时,实际数据类型为Int

当我们存储的是abc字符串时,实际数据类型是embstr

当字符串很长时,实际数据类型为raw

关于embstr和raw的区别

   1)  raw格式字符串适用于字符串长度大于44字节,redis3.2之前为39个

   2)   embstr编码专门用来保存短字符串的,通过一次内存分配函数来分配一块连续的空间,一次包含redisObejct
和sdshdr两个结构;而raw会调用两次内存分配

 redis 查看字符串Value数据类型

redis 查看字符串Value数据类型

3. 测试45个字节 (redis3.2之前为39个)

redis 查看字符串Value数据类型

上图表面38个字节仍然为embstr

字符串的编码类型有int、embstr和raw三种,如上表所示,那么这三种编码类型有什么不同呢?

  • int 编码 :保存的是可以用 long 类型表示的整数值。

  • raw 编码 :保存长度大于44字节的字符串(redis3.2版本之前是39字节,之后是44字节)。

  • embstr 编码 :保存长度小于44字节的字符串(redis3.2版本之前是39字节,之后是44字节)。