首页/数据/数据库速查/APPEND / STRLEN 追加与长度
Redis 命令96 条

APPEND / STRLEN 追加与长度

APPEND 在值尾部追加(键不存在相当于 SET),返回追加后的总长度;STRLEN 返回字节数而非字符数,中文按 UTF-8 占 3 字节。

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

追加与取长度

APPEND 在字符串值尾部追加内容,键不存在时相当于 SET 并返回追加后的总长度;STRLEN 返回值的字节数。两者都是 O(1) 语义的命令,但长度口径是字节而不是字符,中文按 UTF-8 通常占 3 字节,做分页或截断时按字符数思考就会算错。

基本信息

适用Redis 4.0 及以上(命令语义各版本一致)
APPEND 返回值追加后的字符串字节长度
STRLEN字节数而非字符数
限制与所有字符串一样受单键 512MB 上限约束

示例与验证

示例与验证
SET log "line1\n"            # 初始值,6 字节
APPEND log "line2\n"           # 返回 12,追加后的总字节长度
GET log                        # "line1\nline2\n"
STRLEN log                     # 12
SET cn 中文
STRLEN cn                      # 6:每个汉字 3 字节
APPEND cn "-尾部"              # 12:6 + 2 个汉字 6 字节
TYPE log                       # string:确认键类型,APPEND 只能作用于字符串

返回值与长度读法

观察项含义常见误解
APPEND 返回值追加后的总字节长度误当成本次追加的字节数
STRLEN 结果字节长度误当成字符数,中文场景偏大 3 倍
键不存在时 APPEND等价于 SET 并返回长度以为会报错或返回 0
非字符串类型返回类型错误对 Hash、List 调用 APPEND 会直接报错
内部编码小字符串为 embstr,超过阈值转 raw与 STRLEN 无关,但影响内存占用

典型使用场景

  • 简易日志缓冲:按行 APPEND 再由消费者读取后清空
  • 拼包场景:把多个片段合成一个值再一次性取走
  • 长度校验:用 STRLEN 检查上报内容是否符合上限
  • 内存排查:结合 MEMORY USAGE 判断单键占用是否异常
  • 数据修复:确认二进制内容写入后字节长度与预期一致
频繁 APPEND 会让字符串不断增长并触发重新分配与整值复制,日志类场景更适合用 List 或 Stream 承载,字符串只保留小的聚合结果。
用 APPEND 拼大对象(例如把报文拼接成几十 MB 的 JSON)会同时踩上单键上限、复制放大与过期删除时的阻塞三个问题,应改为拆分或放到对象存储。

相关的字节口径命令

  • GETRANGE 按字节区间取值,与 STRLEN 同一口径,中文场景要注意边界落在字节上
  • SETRANGE 按偏移覆盖,偏移超出当前长度时会自动补零字节
  • 写完可再用 STRLEN 校验字节数是否符合协议约定,避免编码差异导致的偏差

易错点

  • 把 STRLEN 当字符数用于分页或截断:中文场景会算错位置,需明确按字节处理
  • 把 APPEND 返回值当成增量长度:它是追加后的总长度,统计增量要自行做差
  • 对非字符串键调用 APPEND 或 STRLEN:直接返回类型错误,先 TYPE 确认键类型
  • 用 APPEND 拼大 value:大 key 在复制、持久化与过期删除时都会带来明显代价

数据来源与参考

  • Redis 官方文档: APPEND
  • Redis 官方文档: STRLEN

相关工具

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