当前位置: 首页 > news >正文

Redis的string类及基础指令

Redis的string类及基础指令

数据结构和内部编码

string

1️⃣字符串数据类型

2️⃣内部编码
编码说明
int存储64位(8个字节)有符号整数时使用
embstr短字符串专用,内存分配效率更高
raw长字符串使用的基础动态字符串
  • 这些内部编码,会随着存入的数据变化进行变换,比如数字和字符一起存会让int转为embstr或者raw

  • 针对汉字的存储,在reids的客户端是什么编码,存入时就是什么编码

  • 127.0.0.1:6379> set key 你好 OK 127.0.0.1:6379> get key "\xe4\xbd\xa0\xe5\xa5\xbd" 这里 \xe4\xbd\xa0 就是 你 的UTF-8的编码,\xe5\xa5\xbd 这个就是 好 的编码
  • 想要Redis能够get到汉字,可以在启动客户端的时候,使用这样的命令

    redis-cli --raw
    ubuntu:~$ redis-cli --raw 127.0.0.1:6379> get key 你好
3️⃣常见指令
1.1 SET
将 string 类型的 value 设置到 key 中。如果 key 之前存在,则覆盖,无论原来的数据类型是什么。之 前关于此 key 的 TTL 也全部失效。

语法:

SET key value [expiration EX seconds|PX milliseconds] [NX|XX]

SET 命令支持多种选项来影响它的行为:

  1. EX seconds 使用秒作为单位设置key的过期时间
  2. PX milliseconds 使用毫秒为单位设置key的过期时间
  3. NX 只在key不存在时才进行设置,如果key存在,则该命令不执行
  4. XX 只在key存在时才进行设置,如果key不存在,则该命令不执行

注意:

  1. [ | ] 这表示中括号里面的设置可选,但是只能选择由 | 分割的其中一个
  2. 上面的部分命令可以进行合并,SETNX,SETEX,PSETEX等,这些算是旧命令了

返回值:

如果设置成功,返回 OK 如果由于 SET 指定了 NX 或者 XX 但条件不满足,SET 不会执行,并返回 (nil)
  • EX

    127.0.0.1:6379> SET key1 hello EX 100 OK 127.0.0.1:6379> ttl key1 (integer) 92 127.0.0.1:6379> get key1 "hello"
    127.0.0.1:6379> SETEX key2 100 world OK 127.0.0.1:6379> ttl key2 (integer) 95 127.0.0.1:6379> get key2 "world"
  • NX

    127.0.0.1:6379> exists key3 (integer) 0 127.0.0.1:6379> set key3 hello nx OK 127.0.0.1:6379> set key3 world nx (nil) 127.0.0.1:6379> get key3 "hello"
    127.0.0.1:6379> exists key4 (integer) 0 127.0.0.1:6379> setnx key4 hello (integer) 1 127.0.0.1:6379> setnx key4 world (integer) 1 127.0.0.1:6379> get key4 "hello"
  • XX

    127.0.0.1:6379> exists key5 (integer) 0 127.0.0.1:6379> set key5 hello xx (integer) 0 127.0.0.1:6379> set key5 hello OK 127.0.0.1:6379> set key5 hello xx OK 127.0.0.1:6379> get key5 "hello"
1.2 GET
获取 key 对应的 value。如果 key 不存在,返回 nil。如果 value 的数据类型不是 string,会报错

语法:

GET key

返回值:

key 对应的 value,或者 nil 当 key 不存在

示例:

127.0.0.1:6379> get key (nil) 127.0.0.1:6379> set key abc OK 127.0.0.1:6379> get key "abc"
1.3 MSET
一次性设置多个 key 的值

语法:

MSET key value [key value ...]

返回值:

永远是 OK

示例:

127.0.0.1:6379> mset key1 aa key2 bb key3 cc OK 127.0.0.1:6379> mget key1 key2 key3 1) "aa" 2) "bb" 3) "cc"
1.4 MGET
一次性获取多个 key 的值。如果对应的 key 不存在或者对应的数据类型不是 string,返回 nil

语法:

MGET key [key ...]

返回值:

对应 value 的列表

示例:

127.0.0.1:6379> mset key1 aa key2 bb key3 cc OK 127.0.0.1:6379> mget key1 key2 key3 1) "aa" 2) "bb" 3) "cc" 127.0.0.1:6379> mget key4 1) (nil)
  • 使用 mget / mset 由于可以有效地减少了网络时间,所以性能相较更高
2.1 INCR
将 key 对应的 string 表示的数字加一。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对 应的 string 不是一个整型或者范围超过了 64 位有符号整型,则报错

语法:

INCR key

返回值:

integer 类型的加完后的数值

示例:

redis> EXISTS mykey (integer) 0 redis> INCR mykey (integer) 1 redis> SET mykey "10" "OK" redis> INCR mykey (integer) 11 redis> SET mykey "234293482390480948029348230948" "OK" redis> INCR mykey (error) value is not an integer or out of range redis> SET mykey 'not a number' "OK" redis> INCR mykey (error) value is not an integer or out of range
2.2 INCRBY
将 key 对应的 string 表示的数字加上对应的值。如果 key 不存在,则视为 key 对应的 value 是 0。如 果 key 对应的 string 不是一个整型或者范围超过了 64 位有符号整型,则报错

语法:

INCRBY key decrement

返回值:

integer 类型的加完后的数值

示例:

redis> EXISTS mykey (integer) 0 redis> INCRBY mykey 3 (integer) 3 redis> SET mykey "10" "OK" redis> INCRBY mykey 3 (integer) 13 redis> INCRBY mykey "not a number" (error) ERR value is not an integer or out of range redis> SET mykey "234293482390480948029348230948" "OK" redis> INCRBY mykey 3 (error) value is not an integer or out of range redis> SET mykey 'not a number' "OK" redis> INCRBY mykey 3 (error) value is not an integer or out of range
2.3 DECR
将 key 对应的 string 表示的数字减一。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对 应的 string 不是一个整型或者范围超过了 64 位有符号整型,则报错

语法:

DECR key

返回值:

integer 类型的减完后的数值

示例:

redis> EXISTS mykey (integer) 0 redis> DECR mykey (integer) -1 redis> SET mykey "10" "OK" redis> DECR mykey (integer) 9 redis> SET mykey "234293482390480948029348230948" "OK" redis> DECR mykey (error) value is not an integer or out of range redis> SET mykey 'not a number' "OK" redis> DECR mykey (error) value is not an integer or out of range
2.4 DECRBY
将 key 对应的 string 表示的数字减去对应的值。如果 key 不存在,则视为 key 对应的 value 是 0。如 果 key 对应的 string 不是一个整型或者范围超过了 64 位有符号整型,则报错

语法:

DECRBY key decrement

返回值:

integer 类型的减完后的数值

示例:

redis> EXISTS mykey (integer) 0 redis> DECRBY mykey 3 (integer) -3 redis> SET mykey "10" "OK" redis> DECRBY mykey 3 (integer) 7 redis> DECRBY mykey "not a number" (error) ERR value is not an integer or out of range redis> SET mykey "234293482390480948029348230948" "OK" redis> DECRBY mykey 3 (error) value is not an integer or out of range redis> SET mykey 'not a number' "OK" redis> DECRBY mykey 3 (error) value is not an integer or out of range
2.5 INCRBYFLOAT
将 key 对应的 string 表示的浮点数加上对应的值。如果对应的值是负数,则视为减去对应的值。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对应的不是 string,或者不是一个浮点数,则报 错。允许采用科学计数法表示浮点数

语法:

INCRBYFLOAT key increment

返回值:

加/减完后的数值

示例:

redis> SET mykey 10.50 "OK" redis> INCRBYFLOAT mykey 0.1 "10.6" redis> INCRBYFLOAT mykey -5 "5.6" redis> SET mykey 5.0e3 "OK" redis> INCRBYFLOAT mykey 2.0e2 "5200"
3.1 APPEND
如果 key 已经存在并且是一个 string,命令会将 value 追加到原有 string 的后边。如果 key 不存在, 则效果等同于 SET 命令

语法:

APPEND KEY VALUE

返回值:

追加完成之后 string 的长度

示例:

redis> EXISTS mykey (integer) 0 redis> APPEND mykey "Hello" (integer) 5 redis> GET mykey "Hello" redis> APPEND mykey " World" (integer) 11 redis> GET mykey "Hello World"
3.2 GETRANGE
返回 key 对应的 string 的子串,由 start 和 end 确定(左闭右闭)。可以使用负数表示倒数。-1 代表 倒数第一个字符,-2 代表倒数第二个,其他的与此类似。超过范围的偏移量会根据 string 的长度调整 成正确的值

语法:

GETRANGE key start end

返回值:

string 类型的子串

示例:

redis> SET mykey "This is a string" "OK" redis> GETRANGE mykey 0 3 "This" redis> GETRANGE mykey -3 -1 "ing" redis> GETRANGE mykey 0 -1 "This is a string" redis> GETRANGE mykey 10 100 "string"
3.3 SETRANGE
覆盖字符串的一部分,从指定的偏移开始

语法:

SETRANGE key offset value

返回值:

替换后的 string 的长度

示例:

redis> SET key1 "Hello World" "OK" redis> SETRANGE key1 6 "Redis" (integer) 11 redis> GET key1 "Hello Redis"
3.4 STRLEN
获取 key 对应的 string 的长度。当 key 存放的类似不是 string 时,报错

语法:

STRLEN key

返回值:

string 的长度。或者当 key 不存在时,返回 0

示例:

redis> SET mykey "Hello world" "OK" redis> STRLEN mykey (integer) 11 redis> STRLEN nonexisting (integer) 0
http://www.jsqmd.com/news/1220784/

相关文章:

  • 2026 年 7 月伯爵中国官方授权售后网点完整名录|官方搬迁、新店启用统一公示公告 - 伯爵官方售后服务中心
  • A Dual Large Language Models Architecture with Herald Guided Prompts for Parallel Fine Grained Tr...
  • 为什么选择 Kimodo-SOMA-SEED-v1.1:5大优势对比其他运动生成模型
  • 实战教程:如何使用KL-Loss训练Faster R-CNN、Mask R-CNN等主流检测器
  • 中俄物流货代,俄罗斯专线系统该怎么挑选?
  • 腾讯元宝给的代码怎么转换为图片,AI 导出鸭一站式完成代码美化转图,依托行业数据验证转换效果与实用价值
  • 为什么头部金融科技公司集体切换至Kimi K2?——基于17家客户POC数据的性能对比白皮书
  • Qwopus3.6-27B-Coder-4bit工具调用功能完全指南:构建智能AI助手的7个步骤
  • CANN启航营代码评审实战指南:如何通过Pull Request高效审核
  • Viewport 单位的陷阱与替代:svh、lvh、dvh 的动态适配策略
  • Redis集群的两种访问方式
  • BOM配单服务哪家更专业?圣禾堂在线提供一站式电子元器件选型解决方案
  • 【langgraph 从入门到精通graphApi 篇】生产部署与性能优化
  • Devstral-Small-2-24B-Instruct-2512-5bit模型架构深度解析:从Mistral3到MLX的完整转换
  • 推荐系统特征工程管线的自动化:从手写 SQL 到 Feature Store 的工程演进与一致性保障
  • ppt模板_0181_蓝色热情
  • 工业现场疑难软故障实录:05 时好时坏,才是最危险的故障
  • 从0到1:使用LogAI进行日志聚类分析的完整实战指南
  • 私域运营知识库_private-domain-operations-knowledge-builder
  • 2026 咸阳专业防水公司推荐:卫生间防水 楼顶漏水 外墙防水 - 吉林同城获客
  • Remount与其他框架互操作:Vue/Angular项目中使用React组件的终极指南
  • 事件驱动后台任务_agent-signal
  • 深圳名表养护江湖:当“老派严谨”遇上“科创精明”,亨得利如何重构信任? - 亨得利官方维修中心
  • Remount API完全手册:define()方法的高级用法与最佳实践
  • 解决win11,macbookM1~4以及PD虚拟机安装ST-link驱动后会存在黄色感叹号的问题
  • 天津LV回收线下实体店地址|天津各区正规LV包包回收门店全清单 - 讯息早知道
  • 游戏服务器的热更新与不停服架构:从 Lua 脚本注入到 Go Plugin 的模块级热重载方案
  • wxWidgets 3.2.11和3.3.3发布(发布日期:2026年7月7日)
  • Redis 三大架构深度解析:主从、哨兵、Cluster 演进、区别与选型
  • 软件开发技术交流平台