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
1) raw格式字符串适用于字符串长度大于44字节,redis3.2之前为39个
2) embstr编码专门用来保存短字符串的,通过一次内存分配函数来分配一块连续的空间,一次包含redisObejct
和sdshdr两个结构;而raw会调用两次内存分配
3. 测试45个字节 (redis3.2之前为39个)
上图表面38个字节仍然为embstr
字符串的编码类型有int、embstr和raw三种,如上表所示,那么这三种编码类型有什么不同呢?
-
int 编码 :保存的是可以用 long 类型表示的整数值。
-
raw 编码 :保存长度大于44字节的字符串(redis3.2版本之前是39字节,之后是44字节)。
-
embstr 编码 :保存长度小于44字节的字符串(redis3.2版本之前是39字节,之后是44字节)。