redis 查看字符串Value数据类型

本文深入探讨了Redis中字符串的存储机制,揭示了其背后的int、embstr和raw三种编码类型的区别与应用场景,特别是针对不同长度字符串的高效存储策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 encoding xx

上述测试发现:

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

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

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

关于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字节)。

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值