开发者社区> 问答> 正文

关于 Redis 字符串小于 39 字节的问题

REDIS_ENCODING_EMBSTR_SIZE_LIMIT set to 39.
比如:
`redis 127.0.0.1:2050> set massage "hello_world"
OK
redis 127.0.0.1:2050> object encoding massage
"raw"`
为什么这段字符串小于 39 编码却是 raw?另外,小于 39 字节 embstr 编码,大于 39 raw 编码的缘由是什么?

展开
收起
落地花开啦 2016-02-29 18:31:58 2477 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    这个和redis的版本有关系。
    查看redis-3.0和最新的版本的object.c文件,可以发现在创建StringObject的时候,会和REIDS_ENCODING_EMBSTR_SIZE_LIMIT比较,这个的默认值是39。
    从2.4版本开始,redis开始使用jemalloc内存分配器。这个比glibc的malloc要好不少,还省内存。在这里可以简单理解,jemalloc会分配8,16,32,64等字节的内存。embstr最小为16+8+8+1=33,所以最小分配64字节。当字符数小于39时,都会分配64字节。
    这个默认39就是这样来的。

    2019-07-17 18:50:47
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
ApsaraDB for Redis——与创客同行 立即下载
微博的Redis定制之路 立即下载
云数据库Redis版的开源之路 立即下载