首页/数据/数据库速查/String 编码(int / embstr / raw)
本包目录(495 条)
MySQL 基础与连接36 条SQL 语法52 条用户与权限21 条备份与恢复56 条主从复制与高可用53 条性能与调优57 条
Redis 命令96 条
Redis 运维与场景124 条

String 编码(int / embstr / raw)

String 有三种内部编码:整数用 int(共享对象)、短字符串用 embstr(≤44 字节,一次分配)、长字符串用 raw;用 OBJECT ENCODING 查看。

数据库速查数据更新于 2026-10-12

观察编码变化

观察编码变化
SET n 12345
OBJECT ENCODING n      # int
SET s "hello"
OBJECT ENCODING s      # embstr
APPEND s "-world-0123456789012345678901234567890123456789"
OBJECT ENCODING s      # raw(追加后变长)
SET big "$(python3 -c 'print("a"*100)')"
OBJECT ENCODING big    # raw
int长整数字符串,可共享对象省内存
embstr≤44 字节,只读小字符串
raw>44 字节或修改过的字符串
编码切换有开销:embstr 一旦被 APPEND 就变 raw 且不可逆;高频改写的键别指望 embstr 的紧凑优势。

易错点

  • embstr 被 APPEND 后「变不回去」:反复改写的短字符串会一直占 raw 的额外内存
  • 以为 OBJECT ENCODING 是只读诊断:GET 等读取不影响,但改值会触发编码变化,排查时要考虑操作时机

数据来源与参考

  • Redis 官方文档: OBJECT ENCODING
  • Redis 官方文档: Redis 数据类型(String)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌